找到一个或多个多重定义的符号
时间: 2024-02-13 15:28:36 浏览: 35
在编程中,当一个符号(如变量、函数等)在多个地方被定义时,就会出现多重定义的错误。这个错误通常会导致链接失败,导致编译器报错"fatal error LNK1169: 找到一个或多个多重定义的符号"。多重定义的错误可以出现在不同的.cpp源文件中,也可以出现在不同的头文件中。
一种常见的多重定义错误的情况是,在多个.cpp源文件中包含了同一个头文件,而该头文件中定义了非成员变量或非成员函数。当这些源文件被编译时,会导致同一个符号被定义多次,进而导致链接错误。
为了解决这个问题,可以采取以下几种方法:
1. 在头文件中定义非成员变量时,可以使用extern关键字来声明变量,而不是在头文件中直接定义变量。然后在对应的.cpp源文件中定义变量。这样可以避免多次定义同一个变量。
2. 在头文件中定义非成员函数时,可以将函数的实现放在.cpp源文件中,并在头文件中声明函数。这样可以避免多次定义同一个函数。
3. 在头文件中使用头文件保护宏来防止多次包含。头文件保护宏的作用是确保头文件只被编译一次,防止多重定义的错误。常用的头文件保护宏写法如下:
```cpp
#ifndef __XXX_H__
#define __XXX_H__
// codes
#endif //__XXX_H__
```
这样,当多个源文件包含同一个头文件时,头文件保护宏会起作用,只有第一次包含会被编译,后续的包含会被忽略。
总结:多重定义的符号错误是由于在多个地方定义了同一个符号导致的。解决方法包括使用extern关键字声明变量、将函数的实现放在.cpp源文件中、使用头文件保护宏防止多次包含。<span class="em">1</span><span class="em">2</span><span class="em">3</span>
#### 引用[.reference_title]
- *1* *2* *3* [fatal error LNK1169: 找到一个或多个多重定义的符号](https://blog.csdn.net/weixin_44980842/article/details/122204334)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v92^chatsearchT3_1"}}] [.reference_item style="max-width: 100%"]
[ .reference_list ]