为什么 MSVC 认为此函数的输入参数是 int 类型,但事实并非如此?

Why does MSVC think that the input parameter to this function is of type int, although it's not?

提问人:George kirby 提问时间:9/11/2023 最后编辑:JoelGeorge kirby 更新时间:9/11/2023 访问量:118

问:

我试图了解隐式指针及其用法,但我似乎无法理解为什么我的编译器 (MSVC) 一直谈论为函数的类型,而不是 .thisintprintcmon()cmon

void printcmon(const cmon* e);

class cmon
{
public:
    int x, y;
    cmon(int x, int y) {
            this->x = x;
            this->y = y;
            printcmon(this);
    }

    int getX() const {
        const cmon* e = this;
        std::cout << e->x << std::endl;
        return 0;
    }
};

void printcmon(const cmon* e) {
    //stuff
}

错误:

error C4430: missing type specifier - int assumed. Note: C++ does not support default-int
error C2143: syntax error: missing ',' before '*'
error C2664: 'void printcmon(const int)': cannot convert argument 1 from 'cmon *' to 'const int'

message : There is no context in which this conversion is possible
message : see declaration of 'printcmon'
message : while trying to match the argument list '(cmon *)'
C++ Visual-Studio 声明

评论

4赞 273K 9/11/2023
你得到反对票,因为你已经将文本作为图片的链接发布。
2赞 Joel 9/11/2023
不,它不是。请参阅此帖子
2赞 Pete Becker 9/11/2023
投票决定重新开放。此问题不需要调试详细信息。很清楚被问到了什么。
2赞 Evg 9/11/2023
@Joel我明白了。如果错误屏幕截图替换为带有真实行号的纯文本,这将是一个好问题。
2赞 Pete Becker 9/11/2023
@Evg - 需要对高代表的人进行更好的培训,以免欺负新人。例如,当你的意思是“X 不正确”时,不要说“你为什么认为 X”。而且(这比听起来更难)而不是“你做X......”说“代码做X”。

答:

0赞 Minxin Yu - MSFT 9/11/2023 #1

第一行之前没有上课 添加声明:void printcmon(const cmon* e);

class cmon;
void printcmon(const cmon* e);

class cmon
{
public:
    int x, y;
    cmon(int x, int y) {
        this->x = x;
        this->y = y;
        printcmon(this);
    }

    int getX() const {
        const cmon* e = this;
        std::cout << e->x << std::endl;
        return 0;
    }
};

void printcmon(const cmon* e) {
    //stuff
    
}