尝试从 () 运算符 return 成员字符串时读取访问冲突
Read Access Violation when trying to return member string from () operator
我有一个class成员变量wchar_t m_var[MAX_PATH];
我正在尝试 return 使用重载运算符 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] = '[=11=]';
}
wchar_t* operator()() { return m_var; }
wchar_t m_var[255];
};
int main() {
MyClass c;
printf("%ws", 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] = '[=12=]';
}
operator wchar_t* () { return m_var; }
wchar_t m_var[255];
};
int main() {
MyClass c;
std::wcout << c;
}
我有一个class成员变量wchar_t m_var[MAX_PATH];
我正在尝试 return 使用重载运算符 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] = '[=11=]';
}
wchar_t* operator()() { return m_var; }
wchar_t m_var[255];
};
int main() {
MyClass c;
printf("%ws", 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] = '[=12=]';
}
operator wchar_t* () { return m_var; }
wchar_t m_var[255];
};
int main() {
MyClass c;
std::wcout << c;
}