使用多个源文件时对类成员函数的未定义引用

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

本文关键字:函数 成员 未定义 引用 源文件      更新时间:2023-10-16

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

头文件

// 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(:未定义对"Foo::bar(("的引用

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

在完全不同的说明中,请避免使用DEV C++,它非常非常旧,多年来没有看到更新。我会推荐CodeBlocks。

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

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

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