Почему это объявление пользовательского класса неприемлемо? - PullRequest
0 голосов
/ 19 октября 2011

В моем коде я хочу объявить экземпляр моего пользовательского класса следующим образом:

 MyClass anInstance;
 if(something){
      anInstance = MyClass("instantiated like this");
 }else{
      anInstance = MyClass("not instantiated like that");
 }
 //use my anInstance object
 ...

Моя IDE помечает первую строку, где я объявляю anInstance, она говорит: No matching constructor for initialization of 'MyClass'

Есть ли что-то незаконное в этом?

Ответы [ 4 ]

4 голосов
/ 19 октября 2011

MyClass вероятно отсутствует конструктор по умолчанию.Если это так, вам нужно инициализировать его при объявлении.Как то так:

MyClass anInstance(something ? "instantiated like this" : "not instantiated like that");
2 голосов
/ 19 октября 2011

Предварительного объявления недостаточно для того, чтобы сделать что-то еще, что привело бы к указателю.

Если вам нужно сделать что-то вроде создания экземпляра класса, вам понадобится полное объявление. Есть ли причины, по которым вы не просто извлекаете файлы .h, содержащие класс?

1 голос
/ 19 октября 2011

Вам просто нужно сделать

class MyClass {
  public:
    MyClass() {}
    //other code
};
1 голос
/ 19 октября 2011

Укажите конструктор для MyClass, который принимает строковый литерал, например:

MyClass {
   public:
   MyClass(const std::string &s):str(s) {}
};
...