Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/161.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 在c+;中声明参数构造函数时出错+;班_C++_Compiler Errors_Syntax Error - Fatal编程技术网

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));