1

我是 C++ 新手,我有一个基本的疑问。
我正在创建一个法语动词共轭应用程序。
我有两个文件,一个 Conjugator.cpp 文件和一个 ErVerbs.cpp 文件。我想将大部分函数保留在 ErVerbs 源文件中,并使用共轭文件来使用这些函数。

以下是一些代码片段:

共轭器.cpp

#include <iostream>
#include <string>
#include "Variables.h"
#include "ErVerbs.cpp"
#include "IrVerbs.cpp"
#include "ReVerbs.cpp"
using namespace std;

void check()
{
    if (verb.substr(len - 2, len) == "er")
        erVerbs();
    else if (verb.substr(len - 2, len) == "ir")
        irVerbs(); 
    else if (verb.substr(len - 2, len) == "re")
        reVerbs();
}
int main()
{
    cout << "Enter verb : ";
    getline(cin, verb);
    cout << "Enter tense : ";
    getline(cin, tense);
    len = verb.length(); 
    check();
}

ErVerbs.cpp

#include <iostream>
#include <string>
using namespace std;

void erVerbs()
{
    cout << "er Verb"; cin.get(); 
}

同样,我还有其他三个具有类似功能的此类 .cpp 源文件。

当我构建程序时,我收到一个错误,我正在使用的每个方法都已定义。

1>ErVerbs.obj : error LNK2005: "void __cdecl erVerbs(void)" (?erVerbs@@YAXXZ) already  defined in Conjugator.obj
1>ErVerbs.obj : error LNK2005: "void __cdecl erVerbs(void)" (?erVerbs@@$$FYAXXZ) already defined in Conjugator.obj
1>IrVerbs.obj : error LNK2005: "void __cdecl irVerbs(void)" (?irVerbs@@YAXXZ) already defined in Conjugator.obj
1>IrVerbs.obj : error LNK2005: "void __cdecl irVerbs(void)" (?irVerbs@@$$FYAXXZ) already defined in Conjugator.obj
1>ReVerbs.obj : error LNK2005: "void __cdecl reVerbs(void)" (?reVerbs@@YAXXZ) already defined in Conjugator.obj
1>ReVerbs.obj : error LNK2005: "void __cdecl reVerbs(void)" (?reVerbs@@$$FYAXXZ) already defined in Conjugator.obj

如果有人能告诉我如何将函数保存在单独的源文件中并将它们#include 到一个源文件中并在没有重新定义错误的情况下使用它们的函数,我将不胜感激。

4

4 回答 4

1

您永远不应包含 *.cpp 文件。删除以下

#include "ErVerbs.cpp"
#include "IrVerbs.cpp"
#include "ReVerbs.cpp"

使用以下内容创建 erVerbs.h:

void erVerbs();

并将其包含在 Conjugator.cpp

#include "ErVerbs.h"
于 2014-02-17T17:18:10.650 回答
1

不:

#include "ErVerbs.cpp"

在 Conjugator.cpp 中,这就是导致链接器错误的原因。通过包含您的 cpp 文件,您可以再次重新定义此功能。

您应该创建 ErVerbs.h 文件并在其中声明您的函数:

#if !defined(ER_VERBS_H)
#define(ER_VERBS_H)
void erVerbs();
#endif

在 Conjugator.cpp 中,包括 #include "ErVerbs.h",其他函数也是如此。

于 2014-02-17T17:20:43.023 回答
0

当您包含模块时

#include "ErVerbs.cpp"
#include "IrVerbs.cpp"
#include "ReVerbs.cpp"

在模块 Conjugator.cpp 中,所有四个模块都包含函数的定义,编译器对此进行了说明。

您必须在某个头文件中声明函数并将其包含在使用这些函数的所有模块中,而它们的定义保留在一个模块(或多个模块之间)中,不会包含在任何其他模块中。

于 2014-02-17T17:18:57.270 回答
0

你是#including另一个.cpp文件.cpp file,所以函数定义将存在于两个地方。

您可能想要做的是创建一个Conjugator.h头文件,声明(但定义)函数,然后包含它。

#pragma once如果您不知道如何防止文件中的多个声明,请在使用时查找标题保护(或) .h

于 2014-02-17T17:19:01.683 回答