问题标签 [multiple-definition-error]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
c - 多个定义和仅标头库
我有一个包含几个 c 和 h 文件的 C 程序。我决定将程序的一部分设为“仅标题”,因此我将代码从 c 移至 h。现在我遇到了多重定义问题,我不知道为什么。例如:
我将 utils.c 中的所有内容都移到了 utils.h(当然还从项目中删除了 utils.c)。utils.h 以
为了确保我的后卫是独一无二的,我尝试改变它(例如:UTILS718171_H_)但它不起作用。
尽管如此,编译器仍然抱怨:
问题可能是这样的:所有c文件都被编译并获得他们自己的代码版本,然后在链接时它会导致问题,但老实说我不知道如何解决这个问题。
c++ - 带有标题的奇怪的多个定义错误
我的项目中有一个奇怪的多重定义错误。我正在使用#ifndef
预处理器命令来避免多次包含同一个文件。我清除了所有其他代码。这是我的简化文件:
1 - main.cpp
2 - IP.cpp
3 - IP.hpp
在win7中使用代码块和gnu gcc,它说:
obj\Debug\main.o:C:\Users\aaa\Documents\prg\ct3\main.cpp|4|首先在这里定义|
||=== 构建完成:1 个错误,0 个警告 ===|
在我删除所有其他代码之前,错误是:
||=== 边缘测试,调试 ===|
obj\Debug\IP.o||在函数“Z9getHSVLUTPA256_A256_12colorSpace3b”中:|
c:\program files\codeblocks\mingw\bin..\lib\gcc\mingw32\4.4.1\include\c++\exception|62|`LUTColor'的多重定义|
obj\Debug\main.o:C:\Users\aaa\Documents\prg\edgetest\main.cpp|31|首次定义在这里|
||=== 构建完成:2 个错误,0 个警告 ===|
'LUTColor' 在 IP.hpp 中!
怎么了?
qt4 - 多个定义错误:一个在我的文件中,一个在 moc 文件中。
我有一个名为 FindAndReplaceBar 的类,它的实现是这样的:
当我运行程序时,我遇到了多个函数定义的问题:
findNext()
, findPrevious()
, replace()
, replaceAll()
.
另一个定义在 moc_FindAndReplaceBar.cpp 文件中进行。我不确定是什么问题,所以我不知道如何解决它!我真的很感激任何帮助,谢谢!
c - 错误:多重定义
我正在编写一个内核模块,其中有 3 个源文件和一个头文件。当我编译它时,它向我显示以下错误:
我认为问题在于编译器struct info
不止一次地进行定义。但是解决方案是什么?struct info
是在头文件中声明的。头文件如下:
c - 多重定义和第一次在我的 C 程序中定义
我正在阅读 APUE(Stevens 的“ UNIX 环境中的高级编程”),所以有一个文件“apue.h”,其中包含一些声明的自定义函数。我编写了一个名为“wait.c”的文件,它定义了在“apue.h”中声明的函数WAIT_CHILD
,WAIT_PARENT
而 14.6.c 是主要函数。
err_ret
只是使用未定义,所以有什么问题?
等待.c
上面的代码是我的“wait.c”源文件。我只是用err_sys
. 以下是我收到的链接命令行和链接器错误消息:
c++ - 类方法的多重定义
我有文件 long_arithm.cpp:
现在我正在尝试构建它,但我有错误(第 1 行和第 2 行 - Eclipce 标题):
(注意,行链接(如:188)已损坏,因为我扔掉了很多注释的代码行。)
为什么我有这些错误以及我应该纠正什么?据我了解,
和其他是“预定义”,我看不到该方法的任何其他定义。
谢谢你的帮助。
c++ - 如何使 ld 将 Multiply 定义的结构/类视为错误?
编辑 - 澄清我的问题的目标:我浪费了很多时间来诊断我希望链接器报告的问题,这是由公认的糟糕的编程风格引起的,例如从一个编译单元复制粘贴代码块时会弹出到另一个,并改变它。
我正在寻找一种在编译/链接时检测此问题的方法。
在此设置中:
啊
A.cpp
主文件
我希望链接器报告结构A
或至少构造函数A::A()
被定义了两次。
但是,g++ 4.4 链接就好了。运行代码显示,在这种情况下,链接器选择使用A
from A.cpp。
当一个函数 foo()
出现在两个目标文件中时,链接器会报告一个多重定义,但对于结构,它不会。
编辑:刚刚发现通过使用nm -C *.o
Ao 和 main.o 都A::A()
定义为弱符号。这使它可以从具有相同名称的符号池中“选择”。也许这个问题可以改写为“我怎样才能使编译器生成强符号?”......
我怎样才能检测到这个问题?
c++ - 静态数组类变量“多重定义”C++
我正在编写一些代码,我需要有一个静态 int 数组的类变量。我知道我可以在头文件中使用类似的东西来做到这一点,啊:
如果我随后将此标头仅包含在另一个文件中,这很好用,如下所示,main.cpp:
但是假设我需要我的 A 类更复杂一些,并且我也想要一个 A.cpp 文件。我将保持我的 main.cpp 文件相同,但随后将 Ah 更改如下(我刚刚添加了一个函数 printA):
然后在文件 A.cpp 中:
用 gcc -o Ao -c A.cpp 编译 Ao 没问题。但是在编译 main.cpp (gcc -o atest main.cpp Ao) 时链接它会失败,并出现“'A::a' 的多重定义”。
我一直在网上搜索解决方案,发现在标头中声明了变量的人在多个地方包含标头时会出现“多重定义”错误,解决方案似乎是在标头,然后仅在一个源(非标头)源文件中定义它。但是我不能同时声明静态和外部的类变量,可以吗?如果我尝试,或者如果我只是将它声明为 extern,我会收到关于变量不是静态的警告(当我同时尝试这两种方法时也会出现“冲突说明符”错误)。
所以,我的问题是:如果头文件需要包含在多个源文件中,是否可以使用静态数组类变量?如果是这样,怎么做?
c++ - C++11 Lambda 和模板导致奇怪的链接器行为
在我的代码中,我有包含依赖于一些模板参数的 lambda 表达式的函数模板。最近我遇到了链接器错误,可能是由于我的 g++ 编译器的更新,但不幸的是,我并不确切知道。
我将举一个小例子来说明这个问题。因为这是一个链接器问题,我们必须创建几个文件来演示它。我们有common.hpp
,它包含一个通用模板函数,两个模块a.cpp
/a.hpp
和b.cpp
/b.hpp
使用该函数和一个main.cpp
包含该main
函数的模块。
文件a.cpp
:
文件a.hpp
文件b.cpp
:
文件b.hpp
文件main.cpp
如果我编译和链接使用
我收到一个multiple-definition
错误:
基本上它说 lambda 表达式已经在 a.xml 中定义。好的。如果我将模板参数b
从 5 更改为 7,一切正常。
问题:
- 这是我应该期待的还是它的错误
g++
?我很确定我使用早期版本的 debian 包编译了这段代码g++-4.7
。 - 除了不使用 lambda 之外,还有其他解决方法吗?我认为,如果生成的符号是静态的,则不会有任何问题。更新:解决方法:制作 my_transform
static
或inline
.
这个问题不是很重要。“不要在这里使用 lambdas”方法没有问题,但我很好奇。:)
javascript - 在 Javascript 中定义数组
在开始时定义变量时,它无法定义第二个二维数组。为什么?应该怎么做?