2016-10-02 2 views
1

Ich habe versucht, mich davon zu überzeugen, dass Objekte des gleichen Typs Zugriff auf private Datenmitglieder haben. Ich schrieb einen Code, von dem ich dachte, dass er mir helfen würde, besser zu verstehen, was vor sich geht, aber jetzt bekomme ich einen Fehler von XCODE7 (nur 1), der besagt, dass ich den nicht deklarierten Bezeichner "combination" verwende.Müssen Funktionen irgendwo anders außer in der Klasse und vor dem Programm deklariert werden?

Wenn jemand mir helfen könnte zu verstehen, wo ich mit meinem Code schief gegangen bin, würde ich gerne lernen.

Mein Code sollte einfach falsch drucken, wenn es korrekt ausgeführt wird.

#include <iostream> 
using std::cout; 
using std::endl; 

class Shared { 
public: 
    bool combination(Shared& a, Shared& b); 
private: 
    int useless{ 0 }; 
    int limitless{ 1 }; 
}; 

bool Shared::combination(Shared& a,Shared& b){ 
    return (a.useless > b.limitless); 
} 

int main() { 

    Shared sharedObj1; 
    Shared sharedObj2; 

    cout << combination(sharedObj1, sharedObj2) << endl; 

    return 0; 
} 

Antwort

1

combination ist eine Elementfunktion der Klasse Shared. Daher kann es nur für eine Instanz von Shared aufgerufen werden. Wenn Sie combination anrufen, spezifizieren Sie nicht, welches Objekt Sie nennen es ein:

cout << combination(sharedObj1, sharedObj2) << endl; 
     ^^^ 
     Instance? 

Der Compiler beschwert sich, weil er denkt, dass Sie eine Funktion combination genannt nennen wollen, aber es gibt keine.

So werden Sie eine Instanz angeben: aber

cout << sharedObj1.combination(sharedObj1, sharedObj2) << endl; 

In diesem Fall spielt es keine Rolle, auf welcher Instanz es aufgerufen wird, so sollten Sie combination statisch machen, so dass Sie kann tun

cout << Shared::combination(sharedObj1, sharedObj2) << endl; 
+2

Super Antwort. Danke für diesen Tipp am Ende. Große Erklärung überall. – user4396386

Verwandte Themen