C++ 应为错误'';先例
快速概述我是如何做到这一点的C++ 应为错误'';先例,c++,C++,快速概述我是如何做到这一点的 创建结构 创建了.cpp文件 使用CMake创建Make文件 运行Make并收到错误 我正在尝试编译以下代码: #include <iostream> using namespace std; enum UnitType { Meter, Inch }; class Meter { double value; public: Meter(double value) : value(value) {} d
#include <iostream>
using namespace std;
enum UnitType { Meter, Inch };
class Meter {
double value;
public:
Meter(double value) : value(value) {}
double convertTo(UnitType unit) {
if (unit == Inch) {
return value * 39.3700787;
}
};
};
int main (int argc, char *argv[])
{
try
{
Meter meter(1.0);
}
catch (int e) {
cout << "exception " << e << endl;
}
return 0;
}
#包括
使用名称空间std;
枚举单位类型{米,英寸};
班计{
双重价值;
公众:
米(双值):值(值){}
双转换器(单位类型单位){
如果(单位=英寸){
返回值*39.3700787;
}
};
};
int main(int argc,char*argv[])
{
尝试
{
米(1.0);
}
捕获(INTE){
不能将枚举成员重命名为“Meter”或类名为“Meter”阅读此示例时,我突然想到了两件事
convertTo
方法不会在所有代码路径上返回
convertTo
方法在关闭}
后有一个;
标识符Meter
列出两次:枚举值和类名
在这里,您将Meter
定义为枚举值
class Meter {
…但在这里(在同一范围内),您试图将其重新定义为类的名称。这是合法的,但要在以后使用它,您必须使用class Meter
,而不仅仅是Meter
:
class Meter meter(1.0);
在我看来,即使两个名称都可以使用相同的名称,也可能会导致混淆和问题,通过简单地重命名其中一个(或两者)可以更好地避免这些混淆和问题。将枚举中的“Meter”更改为其他名称,因为它与类名“Meter”冲突
其次,在“unit!=Inch”的情况下,您需要为函数“convertTo”添加一个返回值。将枚举类型更改为METER和Inch,因为您甚至将类名更改为METER。正如大家所指出的:METER既是枚举又是类名
一个小技巧,让你保持相同的名字:
class UnitType
{
public:
enum UnitType { Meter, Inch };
};
int main()
{
// Meter enum is now inside the scope of UnitType
UnitType::UnitType type = UnitType::Meter;
Meter meter(1.0);
}
在convertTo
上,您不需要关闭}
上的;
。您只需要一个}
对于类{}
而言,try
块中的代码不能抛出任何异常(您不调用库函数,不进行动态分配,并且您的代码不抛出任何异常)。try
和catch
块是完全没有必要的。或者为了更有趣的名字,class-Meter(1.0)代码>@詹姆斯·麦克内利斯:如果你继续使用这样的语言,你将不得不用肥皂漱口——更糟糕的是,破译If.eq。然后在接下来的几年中使用=else else then=endif endif
。哦,等等,你现在正在写C#,Fortran可能更有趣。使用全大写可能会导致传统上全大写的预处理器宏出现问题。
class Meter meter(1.0);
class UnitType
{
public:
enum UnitType { Meter, Inch };
};
int main()
{
// Meter enum is now inside the scope of UnitType
UnitType::UnitType type = UnitType::Meter;
Meter meter(1.0);
}