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)
应该提到的是,这并不是唯一给我带来问题的函数,可能有十多个,而且有些不是那么短和甜蜜。此外,多个文件中都需要这些函数。
您有两种选择来解决此多重定义问题:将方法标记为内联,或将定义放入 .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允许您在头文件中定义非成员函数,而不会违反单一定义规则。
| 归档时间: |
|
| 查看次数: |
7449 次 |
| 最近记录: |