我正在处理一个项目的两个文件,一个是我自己写的,一个是由同学写的,用作一种API。我的问题是,资源文件中定义的函数导致VS2012中的链接器错误。
我收到错误LNK2005,Microsoft定义为:
符号已在对象
中定义以装饰形式显示的给定符号是多重定义的。
资源文件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
引发的错误,因为其中的函数使用的是strtok()
和{{1}的版本微软因安全问题而弃用(我确保没有任何传递给函数的东西可以惹恼他们,就像我所说的那样,所以这些问题不会成为问题;同样,我也不会有时间或知识将strncpy()
替换为strtok()
等等。
编辑:
哎呀,结果我对C ++一无所知。谢谢,全部。答案 0 :(得分:0)
这是错误
#include "ArgvFunctions.cpp"
删除该行。如果您仍有错误,请再次询问。将一个cpp文件包含在另一个cpp文件中永远不正确。