我正在使用多个工程师的多个课程,他们在课程中使用相同的命名结构。由此我得到错误"' struct'类型重新定义"。我该如何解决这个问题?
示例:
RewriteRule ^(vendor)/(\w+)$ $1/index.php?handle=$2 [L]
// 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();
};
错误:错误C2011:' Eng1And2SameName' :' struct'类型重新定义
根据这个Compile error "'struct' type redefinition" although it's the first definition for it,#pragma曾经应该解决问题,但我仍然看到错误。您可以提供任何见解?
答案 0 :(得分:2)
不,#pragma once
可防止多次包含头文件 - 每次都包含一次 - >重新定义。
它们在类
中具有相同的命名结构
*头文件
未在类(嵌套)中定义,但它们可以是:
class Eng1Class
{
public:
struct Eng1And2SameName
{
unsigned int bottle;
};
Eng1Class();
~Eng1Class();
};
或者您可以将这些标题的内容括在两个不同名称的namespace
s。
答案 1 :(得分:0)
定义命名空间会有所帮助
例如,您在同一个名称范围内使用相同的结构定义表示错误。 报告错误
您可以通过定义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;
}
答案 2 :(得分:0)
通常,工作在同一产品上的工程师会以某种方式进行协调,至少他们会使用公共源代码存储库和公共构建。因此,冲突应该更早出现。
&#34;不协调&#34;工程师可能会在他们处理不同产品时发生,如果是这样,每个产品都可能拥有自己的命名空间。因此,您可以在没有冲突的情况下组合产品:
// 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";
}