【发布时间】:2020-03-19 21:34:30
【问题描述】:
我想创建一个简单的程序来演示它的用法。我编写了一个打印 x 和 y 成员变量的函数。我在文件顶部定义了函数。我什至不知道为什么需要这样做,但没关系。到目前为止,一切都很好。 Visual Studio 发现零问题、没有警告和错误。但是,当我编译此代码时,我收到以下错误消息:
1>D:\Dev\Visual Studio Projekte\Projektmappe\FirstProject\src\This.cpp(3,30):错误 C2143:语法错误:在 '*' 之前缺少 ','
1>D:\Dev\Visual Studio Projekte\Projektmappe\FirstProject\src\This.cpp(11,1): 错误 C2664: 'void PrintObject(const int)': 无法将参数 1 从 'Object *' 转换为 'const诠释'
现在在某些时候我也得到了没有定义默认构造函数的错误。但是编译器确实提供了一种权利吗?然后我只是重新输入了代码,错误就消失了。只是我想提的那件事似乎也很愚蠢。 那么为什么编译器认为“this”指的是“const int”,而实际上它指的是我的对象?
#include <iostream>
void PrintObject(const Object* o);
class Object {
public:
int x, y;
Object(int x, int y)
: x(x), y(y) {
PrintObject(this);
}
int GetX() const {
return this->x;
}
int GetXy() const {
return x;
}
};
void PrintObject(const Object* o) {
std::cout << o->x << ", " << o->y << std::endl;
}
int main() {
std::cin.get();
return 0;
}
【问题讨论】:
-
你可能想要实现 operatorhttps://docs.microsoft.com/en-us/cpp/standard-library/overloading-the-output-operator-for-your-own-classes?view=vs-2019