LNK2005 LNK1169当项目中有多个C++文件时

k3fezbri  于 2023-04-13  发布在  其他
关注(0)|答案(1)|浏览(127)

尝试在Visual Studio 2022中构建和压缩我的一个文件,其中有5个C++文件。当我尝试运行其中一个文件时,所有文件都在那里,我得到了错误Unable to start program C:\Users\user\source\repos\CS102AS2_ZL\x64\Debug\CS102AS2_ZL.exe The system cannot find the file specified.它也会继续在控制台中说

[LNK2005] main already defined in t1.obj | File T2.obj | Line 1
[LNK1169] one or more multiply defined symbols found | File CS102AS2_ZL.exe | Line 1

我所有代码中的第一行是#include <iostream>
如果我尝试单独运行其中的一个,那么它很好,代码可以工作,但是当我尝试运行一个时,项目中有其他文件,那么它就会崩溃。

T1.CPP

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

int main() {
    // Declaring Variables
    float a, b, c, x1, x2, discriminant, realPart, imaginaryPart;
    // User Input
    cout << "Enter coefficients a, b and c: ";
    cin >> a >> b >> c;
    discriminant = b * b - 4 * a * c;

    // Calculation for square root
    if (discriminant > 0) {
        x1 = (-b + sqrt(discriminant)) / (2 * a);
        x2 = (-b - sqrt(discriminant)) / (2 * a);

        // Outputs for square root
        cout << "Roots are real and unequal." << endl;
        cout << "x1 = " << x1 << endl;
        cout << "x2 = " << x2 << endl;
    }

    else if (discriminant == 0) {
        cout << "Roots are real and equal." << endl;
        x1 = -b / (2 * a);
        x2 = -b / (2 * a);
        cout << "x1 = " << x1 << " x2 = " << x2 << endl;
    }

    else {
        realPart = -b / (2 * a);
        imaginaryPart = sqrt(-discriminant) / (2 * a);
        cout << "Roots are imaginary." << endl;
        cout << "x1 = " << realPart << "+" << imaginaryPart << "i" << endl;
        cout << "x2 = " << realPart << "-" << imaginaryPart << "i" << endl;
    }

    return 0;
}

T2.CPP

#include <iostream>
using namespace std;

int main()
{
    // Declaring Variables
    int i, start, end;
    int chk = 0, j;
    bool is_prime = true;

    // User Input
    cout << "\nEnter starting number: ";
    cin >> start;
    cout << "\n" "Enter final number: ";
    cin >> end;
    cout << "Number divisible by 7 from " << start << " to " << end << endl;
    cout << "******************************\n";

    // Dividing by 7
    for (i = start; i < end + 1; i++)
    {
        if (i % 7 == 0)
        {
            // Divisible Output
            cout << " " << i;
        }
    }

    // Prime Numbers
    cout << "\n\nPrime Numbers";
    cout << "\n************* \n";

    // Prime Numbers Calculation
    for (start; start <= end; start++)
    {
        for (j = 2; j < start; j++)
        {
            if (start % j == 0)
            {
                chk++;
                break;
            }
        }

        // Prime Numbers Output
        if (chk == 0)
            cout << start << " ";
        chk = 0;
    }
    cout << endl;
    return 0;

}

我猜这段代码的错误是因为我的5个程序都有int main(),但据我所知,你在所有程序中都需要它?

我真的不知道该怎么做,因为这是我第一次制作一个项目,有5个不同的文件,因为我需要“压缩每个任务的整个项目文件夹,其中包含VC++文件,cpp文件,sln文件,调试文件夹等,并上传压缩的整个文件夹”

fwzugrvs

fwzugrvs1#

您可以为每个测试创建一个单独的项目,并在一个解决方案中维护它们。

现在您可以在解决方案资源管理器中右键单击解决方案并添加另一个项目。

在解决方案资源管理器中,您可以右键单击项目并选择“添加新项”,然后创建CPP文件。或者,如果您已经在正确的位置有源文件,则可以“添加现有项”。
所以,在这里我在解决方案中有两个项目。您可以继续添加更多项目。

现在,如果我构建全部(Ctrl-Shift-B),所有项目都被构建。注意上面的屏幕截图中,Test1项目以粗体显示。这意味着它是“启动项目”,所以如果你开始调试(F5),那么Test1将是执行的程序。
您可以通过“项目”菜单或“项目”的上下文菜单更改此设置:在“解决方案资源管理器”中右键单击该项目,然后选择“设置为启动项目”。有关启动项目的更高级选项可以在“项目”菜单的“配置启动项目”下找到。
不必使用“全部生成”。您只需将“启动项目”设置为您正在处理的任何项目,并且每当您按F5时,它将仅生成和运行该项目。这是因为您尚未将该项目配置为对解决方案中的其他项目具有依赖关系。
由于你的作业要求你提交所有的二进制文件,我建议你先做一个清理,然后全部构建,然后测试每个程序,然后再压缩所有文件并发送。
您可能希望使用许多其他方法来设置此解决方案,但我认为我会保持简单,并坚持使用UI和默认目录结构的最直接的方法。
在此之后,下面是根目录结构的样子。漂亮而整洁:

这里是目录树,每个项目的中间文件(作为编译的结果)都存储在每个项目文件夹的x64子目录中,而解决方案的输出文件(可执行文件和程序数据库)都存储在x64根文件夹中。

关于这些名字的注解:x64指的是项目 platform,在本例中是一个64位程序。如果打开Configuration Manager,您可能还会看到x86,这是一个32位平台。您还会看到DebugRelease,这是两个默认的 * configuration 即 * 目标平台的不同构建设置组)。

相关问题