2017-01-05 1 views
1

Я пытаюсь исправить эту ошибку, я все еще изучаю cinder и C++. Может кто-то, пожалуйста, помогите с этим. Спасибо заранееConstructor for must explicity инициализирует элемент, который не имеет конструктора по умолчанию

Ошибка: «Конструктор„SerialHandler“должен в явной инициализации члена„серийный“, который не имеет конструктор по умолчанию»

SerialHandler.h

class SerialHandler 
{ 
public : 
    SerialHandler(){}; // <- error here 
    cinder::Serial serial; // <- 
    void setup(); 
    bool isDone; 
    bool isonline; 
}; 

SerialHandler.cpp

#include "SerialHandler.h" 

void SerialHandler::setup() 
{ 
    isDone =true; 
    try { 
     Serial::Device dev = Serial::findDeviceByNameContains("cu.usbmodem1411"); 
     serial.Serial::create(dev, 115200); 
     console() << "Serial Connected" << std::endl; 
     isonline =true; 
    } 
    catch(...) { 
     console() << "There was an error initializing the serial device!" << std::endl; 

     isonline =false; 

     const vector<Serial::Device> &devices(Serial::getDevices()); 
     for(vector<Serial::Device>::const_iterator deviceIt = devices.begin(); deviceIt != devices.end(); ++deviceIt) { 
     console() << "Device for MAIN?: " << deviceIt->getName() << endl; 
     } 
    } 

} 
+6

Каков ваш вопрос? Ошибка компилятора говорит, что все! – SergeyA

+1

Вам нужно использовать список инициализации ctor для инициализации члена, у которого нет значения по умолчанию ctor (в данном случае 'cinder :: Serial') – Borgleader

+0

* Я все еще изучаю cinder и C++ * - Ошибка была очевидной. Показывает, что попытка использовать фреймворки для изучения C++ не такая хорошая идея. – PaulMcKenzie

ответ

3

Проблема немного менее простая, чем можно было бы предположить из сообщения об ошибке. cinder::Serial имеет защищенный конструктор, поэтому вы не можете даже иметь объект Serial в качестве члена вашего класса. Serial::create - статическая функция-член, которая возвращает объект SerialRef (который является общим указателем на экземпляр Serial).

Так что ваше объявление класса должно быть что-то вроде:

class SerialHandler { 
     ... 
    cinder::SerialRef serial; 
     ... 
}; 

И ваш create вызов в SerialHandler::setup() должен выглядеть следующим образом:

serial = cinder::Serial::create(dev, 115200); 
+1

Спасибо !!! Я учился на своих ошибках. – lmaw

Смежные вопросы