class 在单独的目标文件中声明的 C++ 问题

C++ issue with class declared in a separate object file

我在单独的目标文件中声明 class 然后在另一个文件的主函数中使用它时遇到问题:

main.cpp:

#include <helloclass.hpp>


using namespace std;

int main() {
    Hello hi;
    hi.hello();

    return 0;
}

helloclass.cpp:

#include <iostream>

using namespace std;

class Hello {
    public:

    void hello() {
        cout << "Hello world\n";
    }

    Hello() {}
};

helloclass.hpp:

class Hello {
    public:

    void hello();


    Hello();
};

然后我运行执行以下命令:

g++ -I. -c main.cpp
g++ -c helloclass.cpp
g++ -o main main.o helloclass.o

但是,最后一条命令给出了以下输出:

main.o: In function `main':
main.cpp:(.text+0x1f): undefined reference to `Hello::Hello()'
main.cpp:(.text+0x2b): undefined reference to `Hello::hello()'
collect2: error: ld returned 1 exit status

对我来说,似乎我遗漏了一些非常明显的东西。有谁知道如何解决这个问题?

您不应在单独的源文件中重新定义 class。而是包含头文件并实现 Hello::hello 函数(和 Hello::Hello 构造函数)。