2017-08-10 4 views
0

私は使用している複数のエンジニアから複数のクラスを取得していますが、それらはクラス内で同じ名前の構造を持っています。これから私はエラー "'struct'型の再定義を得ます。これをどうやって回避するのですか?複数のクラスで同じ名前の構造体を定義するにはどうすればよいですか?

例:

// 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; 
} 

エラー:エラーC2011:「Eng1And2SameName」:「構造体」タイプの再定義

このCompile error "'struct' type redefinition" although it's the first definition for itによるとの#pragmaは一度問題を修正する必要がありますが、私はまだエラーを参照してください。あなたが提供できる洞察はありますか?

+2

これらの 'struct'のポイントは何ですか?それらがクラスのためだけのものであれば、それらをクラスの中に宣言することができます。 – NathanOliver

+1

名前空間を定義すると便利です –

答えて

2

いいえ、#pragma onceは、ヘッダーファイルが複数回含まれないようにします。各ヘッダーファイルは1回以上再定義されます。

they have the same named structures in the classes

*ヘッダファイル

The'reは(ネスト)のクラス内で定義されていないが、彼らは次のようになります。

class Eng1Class 
{ 
public: 
    struct Eng1And2SameName 
    { 
     unsigned int bottle; 
    }; 

    Eng1Class(); 
    ~Eng1Class(); 
}; 

それとも違っ二つにこれらのヘッダの内容を囲むことができ秒。namespace秒。あなたが同じ名前スコープ内の同じ構造体定義との誤差を言ったように、名前空間を定義する

0

は、例えば

に役立つだろう。

#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; 
} 
0

通常同じ製品に取り組んでエンジニアをな名前空間を定義することによって、あなたはそれを行うことができます レポートエラー enter image description here

は、少なくとも彼らは、共通のソースコードリポジトリと共通のビルドを使用しますが、何らかの形で調整されています。したがって、紛争は早期に起こったはずです。

「調整されていない」エンジニアは、異なる製品で作業するときに発生することがあります。その場合、各製品には独自の名前空間があります。これにより、競合することなく製品を組み合わせることができます。

// 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"; 
} 
関連する問題