2016-10-04 4 views
0

Beim Zugriff auf die Funktionen meiner Klassenmitglieder kann ich sie nicht finden, wenn ich Zeiger verwende. Dies ist Teil eines viel größeren Projekts und hat das Problem so weit wie möglich vereinfacht. Beachten Sie, dass der Fehler innerhalb von Leere getthenumberhere ist vorkommender ..., wo es ist nicht in der Lage, die getIDnumber Funktion zu erkennen:Zugriff auf Klassenfunktion über Zeiger möglich

#include <iostream> 
#include <stdlib.h> 
#include <vector> 
#include "windows.h" 
#include <stdio.h> 
//#include <math.h> 
#include <string> 
using namespace std; 

class Person 
{ 
public: 
    Person(int); 
    ~Person(); 
    vector<RECT>* processrectangles; 

    int Person::getIDnumber(); 
private: 
    int IDnumber; 

}; 

Person::Person(int x) 
{ 
    IDnumber = x; 
} 
Person::~Person() 
{ 
} 

int Person::getIDnumber() { 
    return IDnumber; 
} 

void getthenumberhere(vector<Person>* thisone) { 
    int outID = *thisone[1].getIDnumber(); //IT CANT FIND THIS FUNCTION 
} 


int main() { 
    int NextID = 1; 

    vector<Person> People; 
    Person newguy(1); 
    People.push_back(newguy); 
    getthenumberhere(&People); 
    return 0; 
} 
+0

Das Zählen beginnt mit '0' in der Programmierung, also sollten Sie' (* thisone) [0] .getIDnumber() ' – alain

+0

verwenden Nur ein Kommentar: Wenn Sie C++ machen, fügen Sie' cstdlib' und 'cstdio' hinzu von 'stdlib.h' und' stdio.h' (und 'cmath' anstelle von' math.h', wenn Sie die Zeile auskommentieren) – wasthishelpful

Antwort

2

Verwenden Klammern Unklarheiten zu vermeiden:

((*thisone)[1]).getIDnumber();

Sie können auch tun

thisone->operator[](1).getIDnumber(); 

wie in den Kommentaren vorgeschlagen.

Auch während Erklärung schreiben:

int getIDnumber();

statt int Person::getIDnumber();. Sie sollten den Auflösungsoperator nicht beim Deklarieren der Elementfunktionen verwenden.

+1

Auch '->' ist Teil des Spiels. – skypjack

+0

(Nvm, ich habe mich geirrt.) –

+0

@skypjack Können Sie vorschlagen, '' - '' in diesem Fall zu verwenden? – user3286661

Verwandte Themen