我遇到了一个多重定义的符号 - 主要问题

时间:2014-07-31 03:28:58

标签: c++

当我尝试在Visual Studio 2010中编译第二个文件时,它给出了多个定义符号的错误,这是有意义的,因为它编译两者并因此包括iostream两次,导致"找到一个或多个多重定义符号& #34;出现错误。所以,我想也许我可以使用包含防护来防止这种情况,但据我了解,你必须将防护添加到包括的文件中。这里适当的行动是什么?

1.cpp

#include <iostream>

using namespace std;

int main()
{
    int x;

    cout << "**********************************" << endl
         << "*    Programming Assignment 1    *" << endl
         << "*     Computer Programming I     *" << endl
         << "*       Author: Cedar Mora       *" << endl
         << "*   Due Date: Thursday, Jan. 24  *" << endl //this isn't true
         << "**********************************" << "\n" << endl;

    cout << "press any key" <<endl;
    getchar();

    return 0;
}

2.cpp

#include <iostream>

using namespace std;

int main()
{
    cout << "bla" << endl;

    return 0;
}

作为旁注,是否可以编译项目的一个项目?

我通常不会问,我只是谷歌答案就可以了,但我似乎无法理解这一点。它迫使我必须为我编写的每个代码部分打开一个单独的项目,以便进行编译。

2 个答案:

答案 0 :(得分:1)

正如其他人所说,您的问题只是有两个main功能。 main是C ++(以及Java和C#...)中的一个特殊函数,它告诉计算机在那里开始执行。像计算机一样思考 - 如果你一次只能执行一行,你会从哪里开始?例如,如果您从1.cpp开始,您将如何知道跳转到2.cpp中的代码?要在另一个函数中执行代码,必须调用它 - 否则,计算机将执行main中包含的代码然后终止。

答案 1 :(得分:0)

你不应该有两个主要功能!将其中一个改为其他东西。例如,尝试将2.cpp中的那个更改为int test()。此外,无论您使用的功能顺序如何,即使您将其放在文件的末尾,也会始终使用main函数启动。

在1.cpp中尝试这个

#include"2.h"
int main()
{
   int x = test();

   return 0;
}

然后添加一个头文件,2.h

#ifndef 2_H_
#define 2_H_

int test();

#endif

并且,在2.cpp文件中,您将实现放在那里:

#include"2.h"
int test(){
cout << "bla" << endl;

    return 0;
}

2.h和2.cpp的目的是将声明和实现分开。