J'ai plusieurs classes d'ingénieurs que j'utilise et elles ont les mêmes structures nommées dans les classes. De cela, j'obtiens l'erreur "redéfinition de type 'struct'". Comment puis-je contourner cela?
Exemple:
// Eng1Class.h
#pragma once
struct Eng1And2SameName
{
unsigned int bottle;
};
class Eng1Class
{
public:
Eng1Class();
~Eng1Class();
};
.
// Eng2Class.h
#pragma once
struct Eng1And2SameName
{
float x, y;
};
class Eng2Class
{
public:
Eng2Class();
~Eng2Class();
};
.
// Main Program
#include "stdafx.h"
#include "Eng1Class.h"
#include "Eng2Class.h"
int _tmain(int argc, _TCHAR* argv[])
{
return 0;
}
Erreur: erreur C2011: 'Eng1And2SameName': redéfinition du type 'struct'
Selon ce Erreur de compilation "type 'struct' redéfinition "bien que ce soit la première définition pour cela le #pragma une fois devrait résoudre les problèmes, mais je vois toujours l'erreur. Des informations que vous pouvez fournir?
2 réponses
Définir un espace de noms aiderait
Par exemple, comme vous l'avez dit, erreur avec la même définition de structure dans la même portée de nom. Erreur de rapports
Vous pouvez le faire en définissant un espace de noms
#include<iostream>
using namespace std;
namespace Eng1 {
struct Eng1And2SameName
{
unsigned int bottle;
};
}
namespace Eng2
{
struct Eng1And2SameName
{
float x, y;
};
}
int main()
{
Eng1::Eng1And2SameName a;
Eng2::Eng1And2SameName b;
return 0;
}
Habituellement, les ingénieurs travaillant sur le même produit sont coordonnés d'une manière ou d'une autre, au moins ils utiliseront un référentiel de code source commun et une version commune. Par conséquent, les conflits auraient dû survenir plus tôt.
Des ingénieurs «non coordonnés» peuvent se produire lorsqu'ils travaillent sur différents produits, et si tel est le cas, chaque produit peut avoir son propre espace de noms. Ainsi, vous pouvez combiner les produits sans avoir de conflits:
// in a header:
namespace Eng1Class {
struct Eng1And2SameName
{
unsigned int bottle;
};
class EngClass
{
public:
EngClass();
~EngClass();
};
}
// in the cpp-file
Eng1Class::EngClass::EngClass() {
cout << "hello, Class 1";
}
// in another (or even the same) header
namespace Eng2Class {
struct Eng1And2SameName
{
float x, y;
};
class EngClass
{
public:
EngClass();
~EngClass();
};
}
// in another (or even the same) cpp-file
Eng2Class::EngClass::EngClass() {
cout << "hello, Class 2";
}
De nouvelles questions
c++
C ++ est un langage de programmation à usage général. Il a été conçu à l'origine comme une extension de C et a une syntaxe similaire, mais c'est maintenant un langage complètement différent. Utilisez cette balise pour les questions sur le code (à être) compilé avec un compilateur C ++. Utilisez une balise spécifique à la version pour les questions liées à une révision standard spécifique [C ++ 11], [C ++ 14], [C ++ 17], [C ++ 20] ou [C ++ 23], etc. .