0

我正在处理的一个项目有两个文件,一个是我自己的作品,一个是由同学编写的,用作一种 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++一无所知。谢谢大家。

4

1 回答 1

0

这是错误

#include "ArgvFunctions.cpp"

删除该行。如果您仍然有错误,请再次询问。将一个 cpp 文件包含在另一个 cpp 文件中是不正确的。

于 2013-11-16T21:59:02.893 回答