gpt4 book ai didi

C++ 类定义中函数的多重定义

转载 作者:太空宇宙 更新时间:2023-11-04 12:57:16 25 4
gpt4 key购买 nike

我刚接触 C++,我试图为模拟编写一个简单的代码,但我遇到了一个我无法解决的多重定义问题。

所以,我正在创建一个类,这是头文件:

钢琴.h

    #ifndef PIANO_H
#define PIANO_H

#include"vettore.h"
#include"PuntoMat.h"
#include<string>
#include<vector>

class Piano
{
public:

//Costruttori
Piano(std::string material, float lenght, float inclin = 0)
: m_material(material), m_lenght(lenght), m_inclin(inclin), m_time(0) {;}

//Metodo per l'aggiunta di corpi al piano
void Add(PuntoMat p) { m_corpi.push_back(&p); }
//Metodo che stampa le coordinate dei corpi nel sistema
void Print();

private:

std::string m_material;
std::vector<PuntoMat*> m_corpi;
float m_lenght;
float m_inclin;
float m_time;

};

#endif

这是对应的.cxx文件,我在里面定义了函数“Print”

钢琴.cxx

    #include"vettore.h"
#include"PuntoMat.h"
#include"Piano.h"
#include<iostream>
#include<stdlib.h>
#include<vector>

void Piano::Print()
{ std::cout << "Tempo: " << m_time << " s" << std::endl;

if(m_corpi.size() == 0)
{ std::cout << "Nessun corpo sul piano" << std::endl;
exit(1);
}

for(int i=0; i<m_corpi.size(); i++)
{ std::cout << *m_corpi[i] << std::endl;
}
std::cout << std::endl;

}

这是我用来验证类的代码

主.cxx

    #include<iostream>
#include"vettore.h"
#include"PuntoMat.h"
#include"Piano.cxx"
#include<string>

main()
{
PuntoMat a(3, Vettore( 0, 0), Vettore( 5.4, 0), "Legno");
PuntoMat b(5, Vettore( 8.3, 6.5), Vettore( 0, 0), "Vetro");

Piano p( "Ferro", 50);
p.Add(a);
p.Add(b);
p.Print();

return 0;
}

当我编译时,我得到一个关于函数 Print 的多重定义错误,这个:

   /tmp/ccp1giKM.o: In function `Piano::Stampa()':
main.cxx:(.text+0x0): multiple definition of `Piano::Stampa()'
/tmp/cctCJRQF.o:Piano.cxx:(.text+0x0): first defined here
collect2: error: ld returned 1 exit status

我真的不知道如何解决这个问题,因为在我看来函数 Print() 只在文件 Piano.cxx 中定义。谁能帮我解决这个问题?

附言忽略代码和注释的一般含义(它们是意大利语)。所有其他包含的类都已经过验证,没有问题。

最佳答案

您的问题是您尝试包含 cxx 文件。您应该只包含 .h/.hpp 文件。您应该告诉编译器使用它,而不是包含源文件。

所以在你的情况下删除“#include”Piano.cxx“行并以这种方式调用你的编译器(假设g++),

g++ main.cxx 钢琴.cxx

应该可以解决问题。如果你想创建更大的项目,你应该看看从源代码创建目标文件。

关于C++ 类定义中函数的多重定义,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46008633/

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