2013-02-11 14 views
5

otrzymuję błąd kompilacjiBłąd - nie można wywołać funkcję składową bez obiektu w C++

cannot call member function ‘bool GMLwriter::write(const char*, MyList<User*>&, std::vector<std::basic_string<char> >)’ without object

gdy próbuję skompilować

class GMLwriter{ 
    public: 
    bool write(const char *fn, MyList<User*>& my_vec, vector<string>edges); 
}; 

funkcja jest zdefiniowana później i nazwał w main z

GMLwriter::write(argv[3], Users, edges);

Użytkownicy została zadeklarowana wcześniej z MyList<User*> Users; (listy podr jest ADT Lista i mam klasy użytkownika) i krawędzie jest zadeklarowana z vector<string>edges

tego co object jest ten błąd odnosząc?

+0

Jak to się nazywa ** tę funkcję? Musisz pokazać tę część kodu, aby uzyskać prawidłową odpowiedź zamiast zgadywania. –

+0

@AlokSave 'GMLwriter :: write (argv [3], Users, edge);' – user2059901

+0

Cóż, to ** nie jest definicją **, W C++, aby móc wywoływać funkcję statyczną, potrzebujesz klasy obiekt. coś w stylu: 'GMLwriter obj; obj.write (...); ' –

Odpowiedz

18

GMLwriter::write nie jest statyczną funkcją GMLwritera, musisz wywołać ją za pomocą obiektu. Na przykład:

GMLwriter gml_writer; 
gml_writer.write(argv[3], Users, edges); 

Jeśli GMLwriter::write nie zależy od żadnego państwa GMLwriter (dostęp do dowolnego członka GMLwriter), można zrobić to statyczna funkcja członkiem. Następnie można nazwać go bezpośrednio bez obiektu:

class GMLwriter 
{ 
public: 
    static bool write(const char *fn, MyList<User*>& my_vec, vector<string>edges); 
    ^^^^ 
}; 

następnie można nazwać:

GMLwriter::write(argv[3], Users, edges); 
1

GMLwriter nie jest obiektem, to typ klasy.

Wywołanie funkcji składowych wymaga instancję obiektu, tj

GMLwriter foo; 
foo.write(argv[3], Users, edges); 

Chociaż istnieje duża szansa, że ​​przeznaczone funkcja będzie wolny lub statyczny:

class GMLwriter{ 
    public: 
    // static member functions don't use an object of the class, 
    // they are just free functions inside the class scope 
    static bool write(const char *fn, MyList<User*>& my_vec, vector<string>edges); 
}; 

// ... 
GMLwriter::write(argv[3], Users, edges); 

lub

bool write(const char *fn, MyList<User*>& my_vec, vector<string>edges); 
// ... 
write(argv[3], Users, edges); 
Powiązane problemy