我定义了一个简单的类.定义位于头文件中,并且实现位于cpp文件中:
标头:
#ifndef POINT_H
#define POINT_H
class Point {
public:
Point(int x, int y);
int getX();
int getY();
private:
int x, y;
};
#endif
Run Code Online (Sandbox Code Playgroud)
CPP
#include Point.h
Point::Point(int x=2, int y=2) {
this->x = x;
this->y = y;
}
int Point::getX() {
return x;
}
int Point::getY() {
return y;
}
Run Code Online (Sandbox Code Playgroud)
这不是编译,我不知道为什么.另外,当我想在其他地方实例化一个点时,比如main.cpp,我在顶部只有#include,只是Point.h?如果是这样,它如何知道在Point.cpp中查找?
#include Point.h
Run Code Online (Sandbox Code Playgroud)
你需要报价Point.h
.
Point::Point(int x=2, int y=2)
Run Code Online (Sandbox Code Playgroud)
默认参数应该在头文件中的声明中,而不是在.cpp文件中的定义中(它将按原样编译,但不会执行您想要的操作).
在风格上,将局部变量或参数命名为与成员变量相同通常是一个坏主意:这样做很容易导致混淆.您还可以使用初始化列表初始化成员变量:
Point::Point(int x_, int y_) : x(x_), y(y_) { }
Run Code Online (Sandbox Code Playgroud)
由于您的代码当前已编写,x
并且y
都已构造,因此您可以为其分配.使用初始化列表可以消除赋值并直接构造它们.这对于类似的基本类型无关紧要int
,但它对类类型很重要.
这不是编译,我不知道为什么.
通常,编译器发出的错误消息很有用.如果没有别的,如果它对你没有帮助,那对我们这些想要帮助的人有帮助.
另外,当我想在其他地方实例化一个点时,比如main.cpp,我
#include
最顶层的只是Point.h?
是.
如何看待Point.cpp?
您编写的每个.cpp文件都会编译为单独的目标文件.将所有.cpp文件编译成目标文件后,所有目标文件都会链接到一个excecutable(或库)中.链接器指出了所有内容的定义.