2017-08-10 230 views
0

我从我正在使用的多个工程师那里获得了多个类,并且他们在类中具有相同的命名结构。从这我得到错误“'结构'类型重新定义”。我如何解决这个问题?如何在多个类中定义相同的命名结构?

实施例:

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

这些“结构”的意义何在?如果他们完全是为了课堂,那么你可以在课堂内宣布他们。 – NathanOliver

+1

定义名称空间将有所帮助 –

回答

2

不,#pragma once可以防止头文件被多次包含 - 每个包含一次 - >重定义。

they have the same named structures in the classes

*头文件

The're不是类(嵌套)中定义的,但他们可能是:

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

    Eng1Class(); 
    ~Eng1Class(); 
}; 

或者你可以与标题的内容封装到两个不同命名为namespace s。

0

定义一个命名空间,将有助于

比如像你说的,在相同的名称范围相同的结构定义的错误。 报告错误 enter image description here

你可以做到这一点通过定义namesapce

#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

通常工程师对同一产品的工作在某种程度上协调,至少他们将使用一个共同的源代码库和共同构建。因此,冲突应该早早出现。

“不协调”的工程师可能在他们使用不同的产品时发生,如果是这样,每个产品都可能有自己的名称空间。因此,您可以在不产生冲突的情况下合并产品:

// 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"; 
} 
相关问题