2016-01-23 65 views
0

我確實在Arduino項目中有兩個簡單類:C++ - Arduino - 沒有匹配函數調用

這些類放在Point.h和Line.h文件中。

#include "Arduino.h" 
#ifndef Point_h 
#define Point_h 

class Point{ 

    public: 
     Point(int x); 
     int getPunkt(); 
     void setPunkt(int x); 

    private: 
     int _x; 
}; 

///////////////////////////////// 
Point::Point(int x){ 
    _x = x; 
} 

int Point::getPunkt(){ 
    return _x; 
} 

void Point::setPunkt(int x){ 
    _x = x; 
} 
#endif 

和:

#include "Point.h" 
#ifndef Line_h 
#define Line_h 

class Line{ 

public: 
    Line(Point p1, Point p2); 

private: 
    Point _p1; 
    Point _p2; 
}; 

Line::Line(Point p1, Point p2){ 
    _p1 = p1; 
    _p2 = p2; 
} 

#endif 

線的構造給了我:

在該行 多個標記 - 候選人是: - 呼叫到「點沒有匹配的功能:: Point()'

我在做什麼錯?這只是一個簡單的例子。

謝謝

回答

0

使用member initializer lists從現在開始_p1_p2必須是默認構造的第一(如果省略成員初始化列表):

Line::Line(Point p1, Point p2) : _p1(), _p2() { ... } 

做任務後在構造函數的身上。 (Point沒有生成默認的構造函數,因爲您提供你自己的。)

你必須這樣做:(執行相同的Point::Point

Line::Line(Point p1, Point p2) : _p1(p1), _p2(p2) {} // copy-initialize 

+0

非常感謝你。我不知道這個概念。它對我來說完全是新的。但我會消除你的鏈接。非常感謝你。這花了我一個晚上。 :-) – Dennis

+0

不客氣,而是先閱讀重複的帖子。 – LogicStuff

+0

是的,我在這個網站上搜索它,但沒有找到答案。但抱歉雙重發布的問題。 – Dennis