Ошибка при инициализации выделенного кучи объекта - PullRequest
1 голос
/ 12 ноября 2011

Я пытаюсь инициализировать выделенный в куче объект следующим образом:

class Ball {
  int radius;
  string colour;
};

int main(){
    Ball *b = new Ball { radius = 5, colour = "red" };
}

Хотите знать, почему это дает мне ошибку? Спасибо

Ответы [ 5 ]

3 голосов
/ 12 ноября 2011

Это не так, как вы инициализируете объект в C ++.

Вот один из способов сделать это:

class Ball {
    int radius;
    string colour;

public:

    //  Define a Constructor
    Ball(int _radius, const string &_colour)
        : radius(_radius)
        , colour(_colour)
    {
    }
};

int main(){
    Ball *b = new Ball(5, "red");

    delete b;  //  Don't forget to free it.
}
0 голосов
/ 12 ноября 2011

Это работает в C ++ 11:

struct Ball {
  int radius;
  std::string colour;
};

int main() {
  Ball* b = new Ball({ 5, "red" });
}
0 голосов
/ 12 ноября 2011

При создании объекта используйте ( ... ) вместо { ... } и не нужно писать имя переменной. просто передайте значение, которое будет присвоено.

Ball *b = new Ball { radius = 5, colour = "red" };` // Wrong

изменить на

Ball *b = new Ball ( 5, "red" );

и не забудьте объявить a constructor в своем классе Ball, в разделе public.

Ball(int, std::string);
0 голосов
/ 12 ноября 2011

Множество вопросов!

Попробуйте это:

class Ball {
public:
  Ball(int r, const string &s)
  {
    radius = r;
    colour = s;
  }
  int radius;
  string colour;
};

int main(){
    Ball *b = new Ball(5, "red");
    // ....
    // delete b;  <-- dont forget
}
0 голосов
/ 12 ноября 2011

Используйте () вместо {}.Вы вызываете конструктор, который является просто специальной функцией, которая создает экземпляр объекта.

Итак, синтаксис выглядит так:порядок параметров в конструкторе (от 5 до «красного») определяет, какая переменная будет присвоена какому значению.Таким образом, вы не помещаете имя переменной в вызов конструктора.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...