使用超过 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。
我正在尝试学习如何分离头文件和实现文件,但它不起作用,尽管我试图使其尽可能简单
头文件
// 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。