C++用include包含文件的时候,为什么单独包含一个cpp文件可以成功运行,而再包含一个cpp文件就出错呢?
两个文件里各有一个简单的函数,把b.cpps删除调,调用它的那条语句注释掉,程序是可以运行的,且调用a文件函数的结果正确;但是保持两个文件用include命令就出错了:m...
两个文件里各有一个简单的函数,把b.cpps删除调,调用它的那条语句注释掉,程序是可以运行的,且调用a文件函数的结果正确;但是保持两个文件用include命令就出错了:multiple definition of sub(double, double)first defined hereerror. ld returned 1 exit status
展开
1个回答
展开全部
因为你在 main.c 中 #include 了 a.cpp 和 b.cpp,这样相当于在 main.c 里面实现了一次 add() 和 sub() 函数,然后在 a.cpp 和 b.cpp 里面又同样存在这样的函数,于是就出现了函数定义了两次的问题。
我怀疑你设置 codeblocks 不编译 a.cpp 了,所以 add() 函数没有报出这个错误。
你可以在左边文件列表里面的 b.cpp 上点右键,在弹出菜单里面选择 properties,如果是中文的话,可能是属性之类的,然后在弹出的窗口中选择 build, 然后把它设置为不属于 Debug 也不属于 Release,这样它就不会被编译,也就不会出现这样的错误了。
但是!通常我们不 #include 一个 .cpp 文件的,就是因为会出现这样的问题,即使你用了上述的方式避免了问题,但是仍然有可以在两个 cpp 文件中都引入同一个 .cpp 文件,然后再次出现这样的问题。
我怀疑你设置 codeblocks 不编译 a.cpp 了,所以 add() 函数没有报出这个错误。
你可以在左边文件列表里面的 b.cpp 上点右键,在弹出菜单里面选择 properties,如果是中文的话,可能是属性之类的,然后在弹出的窗口中选择 build, 然后把它设置为不属于 Debug 也不属于 Release,这样它就不会被编译,也就不会出现这样的错误了。
但是!通常我们不 #include 一个 .cpp 文件的,就是因为会出现这样的问题,即使你用了上述的方式避免了问题,但是仍然有可以在两个 cpp 文件中都引入同一个 .cpp 文件,然后再次出现这样的问题。
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询