【发布时间】:2021-09-07 05:14:55
【问题描述】:
我收到错误:
/usr/bin/ld: /tmp/ccCbt8ru.o: in function `some_function()':
Thing.cpp:(.text+0x0): multiple definition of `some_function()'; /tmp/ccc0uW5u.o:main.cpp:(.text+0x0): first defined here
collect2: error: ld returned 1 exit status
在构建这样的程序时:
main.cpp
#include "common.hpp"
#include "Thing.hpp"
int main() {
some_function();
}
common.hpp
#pragma once
#include <iostream>
void some_function() {
std::cout << "something" << std::endl;
}
Thing.hpp
#pragma once
class Thing {
public:
void do_something();
};
Thing.cpp
#include "Thing.hpp"
#include "common.hpp"
void Thing::do_something() {
some_function();
}
我正在编译:g++ main.cpp Thing.cpp -o main.out
我也尝试过使用包含保护而不是#pragma once,但它似乎也不起作用。有什么我忘记了吗?
【问题讨论】:
-
包含保护防止在单个 cpp 文件中包含多个标题(技术术语:翻译单元)。您有多个 cpp 文件。每个都包括。每个都有自己的
some_function定义。考虑制作some_functioninline。
标签: c++ g++ multiple-definition-error