2017-01-05 6 views
1

이 오류를 해결하기 위해 노력하고 있습니다. 여전히 Cinder 및 C++를 배우고 있습니다. 누군가 도와 드릴 수 있습니까? 사전에 감사기본 생성자가없는 멤버를 명시 적으로 생성해야하는 생성자

오류 : "생성자 '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 (이 경우'cinder :: Serial')가없는 멤버를 초기화하려면 ctor의 초기화 목록을 사용해야합니다. – Borgleader

+0

* 여전히 Cinder 및 C++ *를 배우고 있습니다. - 오류가 분명합니다. 프레임 워크를 사용하여 C++를 배우려는 시도는 그리 좋은 생각이 아닙니다. – PaulMcKenzie

답변

3

이 문제는 오류 메시지에서 추정 할 수있는 것보다 덜 간단합니다. cinder::Serial에는 보호 된 생성자가 있으므로 Serial 객체를 클래스 구성원으로 가질 수 없습니다. Serial::createSerialRef 개체 (Serial의 인스턴스에 대한 공유 포인터 임)를 반환하는 정적 멤버 함수입니다.

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

그리고 SerialHandler::setup()create 호출과 같아야합니다 :

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

감사합니다 !!! 나는 실수로부터 배우고있다. – lmaw