刚学C++,问一个很菜的问题

sunshinejennifer 2010-10-09 09:48:34
为什么下面这个程序在红色部分出现“error C2061: syntax error : identifier 'P1'”错误呢?
难道COMPUTER类中的CPU对象cpu不能直接通过构造函数对CPU中的成员变量进行赋值吗?


#include<iostream>
using namespace std;

enum CPU_Rank {P1=1,P2,P3,P4,P5,P6,P7};

class CPU
{
public:
CPU(CPU_Rank Rank, int Frequency, float Voltage)
{
rank = Rank;
frequency = Frequency;
voltage = Voltage;
cout<<"构造了一个CPU"<<endl;

}
CPU()
{
cout<<"构造了一个CPU"<<endl;
}

~CPU()
{
cout<<"析构了一个CPU"<<endl;

}
void run() { cout<<"CPU开始运行!"<<endl; }
void stop(){ cout<<"CPU停止运行!"<<endl; }

private:
CPU_Rank rank;
int frequency;
float voltage;
};

class RAM
{
public:
RAM()
{
cout<<"构造了一个RAM"<<endl;
}
~RAM()
{
cout<<"析构了一个RAM"<<endl;
}
void run() { cout<<"RAM开始运行!"<<endl; }
void stop(){ cout<<"RAM停止运行!"<<endl; }
};

class CDROM
{
public:
CDROM()
{
cout<<"构造了一个CDROM"<<endl;
}
~CDROM()
{
cout<<"析构了一个CDROM"<<endl;
}
void run() { cout<<"CDROM开始运行!"<<endl; }
void stop(){ cout<<"CDROM停止运行!"<<endl; }
};

class COMPUTER
{
private:
CPU cpu(P1,2,3.0};
RAM ram;
CDROM cdrom;
public:
COMPUTER()
{
cout<<"构造了一个COMPUTER"<<endl;
}
~COMPUTER()
{
cout<<"析构了一个COMPUTER"<<endl;
}
void run()
{
cout<<"CDROM开始运行!"<<endl;
cpu.run();
ram.run();
}
void stop()
{
cout<<"CDROM停止运行!"<<endl;
cpu.stop();
ram.stop();
}
};

int main()
{
COMPUTER a;
CPU cpu1(P1,2,3.0);

a.run();
a.stop();
return 0;
}
...全文
105 4 打赏 收藏 转发到动态 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
lly212 2010-10-10
  • 打赏
  • 举报
回复
CPU cpu(P1,2,3.0};

CPU cpu;
在构造函数中用CPU的构造函数初始化cpu
xiazdong 2010-10-09
  • 打赏
  • 举报
回复
effective C++好像说过,
1。enum 的P1约等于const int所以不能进行复制。。不知道对不对。。
2。还有另外在类的声明时貌似不能够定义除非是static const int 值,所以不能对cpu调用构造函数。
务实的幻想家 2010-10-09
  • 打赏
  • 举报
回复
在构造函数的定义中初始化,而且你的构造参数列表好像也有问题。
lizhong2613 2010-10-09
  • 打赏
  • 举报
回复

#include<iostream>
using namespace std;

enum CPU_Rank {P1=1,P2,P3,P4,P5,P6,P7};

class CPU
{
public:
CPU(CPU_Rank Rank, int Frequency, float Voltage)
{
rank = Rank;
frequency = Frequency;
voltage = Voltage;
cout<<"构造了一个CPU"<<endl;

}
CPU()
{
cout<<"构造了一个CPU"<<endl;
}

~CPU()
{
cout<<"析构了一个CPU"<<endl;

}
void run() { cout<<"CPU开始运行!"<<endl; }
void stop(){ cout<<"CPU停止运行!"<<endl; }

private:
CPU_Rank rank;
int frequency;
float voltage;
};

class RAM
{
public:
RAM()
{
cout<<"构造了一个RAM"<<endl;
}
~RAM()
{
cout<<"析构了一个RAM"<<endl;
}
void run() { cout<<"RAM开始运行!"<<endl; }
void stop(){ cout<<"RAM停止运行!"<<endl; }
};

class CDROM
{
public:
CDROM()
{
cout<<"构造了一个CDROM"<<endl;
}
~CDROM()
{
cout<<"析构了一个CDROM"<<endl;
}
void run() { cout<<"CDROM开始运行!"<<endl; }
void stop(){ cout<<"CDROM停止运行!"<<endl; }
};

class COMPUTER
{
private:
CPU cpu;
RAM ram;
CDROM cdrom;
public:
COMPUTER()
{
cout<<"构造了一个COMPUTER"<<endl;
}
~COMPUTER()
{
cout<<"析构了一个COMPUTER"<<endl;
}
void run()
{
cout<<"CDROM开始运行!"<<endl;
cpu.run();
ram.run();
}
void stop()
{
cout<<"CDROM停止运行!"<<endl;
cpu.stop();
ram.stop();
}
};

int main()
{
COMPUTER a;
CPU cpu1(P1,2,3.0);

a.run();
a.stop();
return 0;
}
在声明类的成员的时候你怎么能初始化呢,你可以在computer类的构造函数中进行默认的初始化啊,声明成员的时候是不行的。

64,636

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

试试用AI创作助手写篇文章吧