C++ 在c+;中声明参数构造函数时出错+;班
考虑以下代码的扩展:C++ 在c+;中声明参数构造函数时出错+;班,c++,compiler-errors,syntax-error,C++,Compiler Errors,Syntax Error,考虑以下代码的扩展: #include <iostream> using std::cout; using std::string; using std::endl; class SuperPower{ private: string name; int category; public: string getName(){return name;} int getCategory(){return category;} SuperPower
#include <iostream>
using std::cout;
using std::string;
using std::endl;
class SuperPower{
private:
string name;
int category;
public:
string getName(){return name;}
int getCategory(){return category;}
SuperPower(string name, int category){
this->name = name;
this->category = category;
}
};
class Person{
private:
string name, nameRealLife;
SuperPower **powers;
SuperPower *powers2;
int nPowers;
protected:
Person(string name, string nameRealLife){
this->name = name;
this->nameRealLife = nameRealLife;
powers = new SuperPower*[4];
powers2 = new SuperPower[4]("",0);
nPowers = 0;
}
public:
~Person(){
delete []powers;
}
Person(const Person& p){
name = p.name;
nameRealLife = nameRealLife;
powers = new SuperPower*[4];
nPowers = p.nPowers;
for (int i=0;i<nPowers;i++)
powers[i] = p.powers[i];
}
string getName(){
return name;
}
bool addSuperPower(SuperPower &sp){
if (nPowers>=4)
return false;
powers[nPowers++] = &sp;
return true;
}
virtual double getTotalPower(){
double totalPower = 0;
for (int i=0;i<nPowers;i++){
totalPower += powers[i]->getCategory();
}
return totalPower;
}
};
...
试图编译代码会导致错误:数组new[-fppermissive]中带括号的初始值设定项
powers2=新的超级大国4强>
为什么错了?它不只是定义构造函数的参数吗?为什么会这样?如何修复它?不要使用原始指针。使用
std::vector
。它使生活更容易
std::vector<SuperPower> powers2; // declaration
...
powers2(4, SuperPower("",0)), // in constructors's initialisation list
std::vector powers2;//宣言
...
powers2(4,SuperPower(“,0)),//在构造函数的初始化列表中
您可以使用:powers2=newsuperpower[4]{{、0}、{、0}、{、0}、{、0}、{、0}、{、0}
而不是powers2=新超级大国[4](“”,0)
但不要这样做,相反,我坚持让您像这样使用std::vector
:
std::vector<Superpower> powers2;
使用
std::vector
,
std::vector<Superpower> powers2;
powers2(4, Superpower("", 0));