我正在处理的一个项目有两个文件,一个是我自己的作品,一个是由同学编写的,用作一种 API。我的问题是,资源文件中定义的函数导致 VS2012 中的链接器错误。
我收到错误LNK2005,微软将其定义为:
已在对象中定义的符号
以装饰形式显示的给定符号是多重定义的。
资源文件中定义的三个函数ArgvFunctions.cpp
是:
void convertCommandToArgv(char* commandString, char** argv[], int* argc);
void freeDynamicallyAllocatedArgv(char* argv[], int argc);
void doMain(int argc, char* argv[]);
/* renamed from "main" to avoid error. is never called: only shows implementation */
在#includes
我的实现文件中:
#include <ios>
#include <iostream>
#include <fstream>
#include <string>
#include <vector>
#include "bmpfileheaders.h" // no problems with this one
#include "ArgvFunctions.cpp"
如果它有帮助:在我遇到这个问题之前,我不得不抑制由此引发的错误ArgvFunctions.cpp
,因为其中的函数使用了 Microsoft 的版本,strtok()
并且strncpy()
由于安全问题而被微软弃用(我确保没有任何东西传递给据我所知,这些功能可能会使它们绊倒,所以这些问题无论如何都不是问题;而且,我没有时间或知识来替换strtok()
等等strtok_s()
)。
编辑:
哎呀,原来我对C++一无所知。谢谢大家。