多个c++文件导致“多重定义”错误?

Dav*_*vid 4 c++ multiple-definition-error

我第一次在一个项目中使用多个 C++ 文件。两者都需要包含受保护的(#ifndef)头文件。但是,当我这样做时,我收到了多重定义错误。

我拥有的是两个直接调用标头的 .cpp 文件,一个间接调用标头的文件(另一个包含它),然后是包含它的另外两个头文件。

那么我需要做什么来消除错误呢?

错误:

obj\Debug\main.o||在函数Z14sortLibQtyTest4BookS_':| [PATH]\miscFuncs.h|16|multiple definition ofsortLibQtyTest(Book, Book)'

代码:

bool sortLibQtyTest(Book a, Book b){ return a.getQty() > b.getQty(); }
Run Code Online (Sandbox Code Playgroud)

应该提到的是,这并不是唯一给我带来问题的函数,可能有十多个,而且有些不是那么短和甜蜜。此外,多个文件中都需要这些函数。

jua*_*nza 5

您有两种选择来解决此多重定义问题:将方法标记为内联,或将定义放入 .cpp 文件中。

1)将方法标记为内联:

// Foo.h

inline bool foo(int i) { return i = 42; }
Run Code Online (Sandbox Code Playgroud)

2)将定义放入.cpp文件中:

// Foo.h

inline bool foo(int i); // declaration

// Foo.cpp
bool foo(int i) { return i = 42; } // definition
Run Code Online (Sandbox Code Playgroud)

在第一种情况下,该方法是否实际上由编译器内联在这里无关紧要:inline允许您在头文件中定义非成员函数,而不会违反单一定义规则。