gpt4 book ai didi

c++ - 尝试链接 .cpp 文件时出现多重定义错误(头文件中没有 .cpp)

转载 作者:行者123 更新时间:2023-11-30 01:56:32 24 4
gpt4 key购买 nike

所以我在上基础编程课,我们正在学习如何将文件链接在一起。问题是我遇到了一个似乎没有人能够修复的错误。我已经去过我的教授、学生助理和校园里的编程辅助实验室,但运气不佳。

我还在这里搜索了至少 10 篇与多个定义错误相关的不同帖子,但在每种情况下都是:

  1. 尝试#include .cpp 文件或

  2. 函数定义在头文件中。

如您所见,这些情况都不适用于此处(我删除了所有注释以使代码更易于阅读):

头文件:square.h:

#ifndef SQUARE_H
#define SQUARE_H

class Square
{
private:
float side;
public:
void setSide(float);
float findArea();
float findPerimeter();
};

#endif

函数定义文件:square.cpp

#include "square.h"
#include <iostream>
#include <cstdlib>

using namespace std;

void Square::setSide(float length)
{
side = length;
}

float Square::findArea()
{
return side * side;
}

float Square::findPerimeter()
{
return 4 * side;
}

程序文件:test1.cpp

#include "square.h"
#include <iostream>

using namespace std;


int main()
{
Square box;
float size;

cout << "\n\nHow long is a side of this square?: ";
cin >> size;

box.setSide(size);

cout << "\n\nThe area of the square is " << box.findArea();

cout << "\n\nThe perimeter of the square is " << box.findPerimeter();

cout << endl << endl;

return 0;
}

最后,每当我尝试编译时出现错误:

/tmp/ccVaTqTo.o: In function `Square::setSide(float)':
square.cpp:(.text+0x0): multiple definition of `Square::setSide(float)'
/tmp/cc4vruNq.o:test1.cpp:(.text+0x0): first defined here
/tmp/ccVaTqTo.o: In function `Square::findArea()':
square.cpp:(.text+0xe): multiple definition of `Square::findArea()'
/tmp/cc4vruNq.o:test1.cpp:(.text+0xe): first defined here
/tmp/ccVaTqTo.o: In function `Square::findPerimeter()':
square.cpp:(.text+0x20): multiple definition of `Square::findPerimeter()'
/tmp/cc4vruNq.o:test1.cpp:(.text+0x20): first defined here
collect2: ld returned 1 exit status

编译命令,仅供引用 g++ test1.cpp square.cpp -o testfile

使用 makefile 似乎没有任何区别,我只是最终盯着完全相同的编译错误。我试过使用两个不同的 makefile:

生成文件 1

square: test1.cpp square.cpp
g++ test1.cpp square.cpp -o square

生成文件 2

square: test1.o square.o
g++ test1.o square.o -o square

test1.o: test1.cpp
g++ -c test1.cpp

square.o: square.cpp
g++ -c square.cpp

现在我只知道这是某种链接器错误,但我不知道该怎么办。我问过的每个人都说我的代码是正确的。但显然有些地方是错误的。

如有任何帮助,我们将不胜感激。 :D

最佳答案

好的。创建一个新的、干净的目录,并将代码复制/粘贴到新文件中(与旧文件具有相同的文件名允许它最终编译。出于某种原因,我猜编译器只是不喜欢我的旧文件。

关于c++ - 尝试链接 .cpp 文件时出现多重定义错误(头文件中没有 .cpp),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19695752/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com