У меня есть два файла для проекта, над которым я работаю, один из моих собственных и другой, написанный другим студентом, который служит своего рода 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()
а также strncpy()
что Microsoft устарела из-за проблем с безопасностью (я уверена, что ничто из передаваемых функций не может сбить их с толку, насколько я могу судить, поэтому эти проблемы не будут проблемой в любом случае; кроме того, у меня нет время или знания, чтобы заменить strtok()
с strtok_s()
и так далее).
РЕДАКТИРОВАТЬ:
Ой, оказывается, я ничего не знаю о C ++. Спасибо всем.
Это ошибка
#include "ArgvFunctions.cpp"
удалить эту строку. Если у вас все еще есть ошибки, спросите еще раз. Никогда не правильно включать один файл cpp в другой файл cpp.
Других решений пока нет …