Visual Studio 为什么MSVC认为这个函数的输入参数是int类型的,尽管它不是?

p8h8hvxi  于 2023-10-23  发布在  其他
关注(0)|答案(1)|浏览(123)

我试图学习隐式this指针及其用法,但我似乎无法理解为什么我的编译器(MSVC)一直将int作为函数printcmon()的类型,而不是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 *)'
dgiusagp

dgiusagp1#

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

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
    
}

相关问题