我有一个带有成员变量wchar_t m_var[MAX_PATH];
的类
我正在尝试使用重载运算符wchar_t* operator()()
返回它。还尝试了const wchar_t*
,以防万一。里面只是一个return m_var;
,但不幸的是,我总是遇到读取访问冲突。
当我简单地编写MyClass.m_var时,它可以完美地工作。
我通过代码printf("%ws", MyClass);
而不是printf("%ws", MyClass.m_var);
遇到该错误
#include <cstdio>
class MyClass {
public:
MyClass() { random_op(); }
~MyClass() {}
void random_op() {
for(int i = 0; i <= 11; i++) {
m_var[i] = 'A';
}
m_var[12] = '\0';
}
wchar_t* operator()() { return m_var; }
wchar_t m_var[255];
};
int main() {
MyClass c;
printf("%ws", c);
}
为什么会这样?
我认为这里有两个错误。
[首先,我认为您正在尝试编写转换运算符。正确的语法是
operator wchar_t *() {
不是
wchar_t * operator()() {
第二个错误是,在调用printf
(和类似名称)时,普通类型转换不适用,因为编译器无法知道期望的类型。
因此此代码将起作用(但未经测试)。
#include <iostream>
class MyClass {
public:
MyClass() { random_op(); }
~MyClass() {}
void random_op() {
for(int i = 0; i <= 11; i++) {
m_var[i] = 'A';
}
m_var[12] = '\0';
}
operator wchar_t* () { return m_var; }
wchar_t m_var[255];
};
int main() {
MyClass c;
std::wcout << c;
}
您应该有这个来调用opearator():
printf("%ws", c());
我认为这里有两个错误。
[首先,我认为您正在尝试编写转换运算符。正确的语法是
operator wchar_t *() {
不是
wchar_t * operator()() {
第二个错误是,在调用printf
(和类似名称)时,普通类型转换不适用,因为编译器无法知道期望的类型。
因此此代码将起作用(但未经测试)。
#include <iostream>
class MyClass {
public:
MyClass() { random_op(); }
~MyClass() {}
void random_op() {
for(int i = 0; i <= 11; i++) {
m_var[i] = 'A';
}
m_var[12] = '\0';
}
operator wchar_t* () { return m_var; }
wchar_t m_var[255];
};
int main() {
MyClass c;
std::wcout << c;
}