尝试从 () 运算符 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;
}