头文件.等等

use*_*189 1 c++ header class

我定义了一个简单的类.定义位于头文件中,并且实现位于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中查找?

Jam*_*lis 8

#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(或库)中.链接器指出了所有内容的定义.