使用超过 1 个源文件时未定义对 class 成员函数的引用

Undefined reference to class member function when using more than 1 source file

我正在尝试学习如何分离头文件和实现文件,但它不起作用,尽管我试图使其尽可能简单

头文件

// foo.h
#ifndef FOO_H
#define FOO_H

struct Foo{
    void bar();
};

#endif

实现文件

 // foo.cpp
 #include "foo.h"
 #include <iostream>

 void Foo::bar(){
     std::cout << "test";
 }

主文件

// test.cpp
#include <iostream>
#include "foo.h"

int main(){
    Foo foo;
    foo.bar();
}

当我尝试编译它时,它抛出一个错误

test.cpp:(.text+0x15): undefined reference to `Foo::bar()'

您没有告诉我们您是如何编译代码的,但是除了 test.cpp 之外,您还需要编译 foo.cpp。如果您使用的是 GCC,则命令为:

g++ test.cpp foo.cpp -o test

您忘记在 bar 的定义中添加 void(在实现文件中)。 应该是 void Foo::bar() {....

为了编译多个文件,您可以将这两个 .cpp 文件添加到同一目标下的项目中。然后你的 DEV C++ IDE 会自动将这两个文件添加到构建中并 link 它们一起。

关于完全不同的说明,请避免使用 DEV C++,它非常非常旧并且多年未见更新。我建议改用 CodeBlocks。