2016-09-14 3 views
0

Я довольно глуп, когда речь заходит о C++, поскольку я из чистого Java-фона с хорошим знанием Python, но я пытаюсь создать простой класс C++ с вектором, указанным в заголовочный файл и получить доступ к нему в функции в исходном файле. Я могу получить доступ к этому в конструкторе, однако, как только я использую функцию, она, по-видимому, не существует в соответствии с Eclipse CDT и цепочкой сборки.Поле класса недоступно внутри функции

Заголовок файла (simulator.h):

#ifndef GAME_PHYSICS_SIMULATOR_H_ 
#define GAME_PHYSICS_SIMULATOR_H_ 

#include <vector> 

#include "../world/object.h" 

class simulator { 
public: 
    simulator(); 
    virtual ~simulator(); 

    void add_object(object o); 

private: 
    std::vector<object> objects; 
}; 

#endif /* GAME_PHYSICS_SIMULATOR_H_ */ 

Исходный файл (simulator.cpp):

#include "simulator.h" 

simulator::simulator() { 
    object o; 
    objects.push_back(o); // Works fine in terms of acknowledging the existence of 'objects'. 
} 

simulator::~simulator() {} 

void add_object(object o) { 
    objects.push_back(o); // Immediately throws error saying 'objects' doesn't exist. 
} 

Самое смешное, однако, заключается в том, что я могу получить доступ к вещи, как int 'с или std::string-х хорошо. Как только я пытаюсь использовать вектор, он ломается. Есть идеи?

+1

Почему downvote? – finnrayment

+0

В настоящий момент вы определяете 'add_object' как глобальную функцию, не являющуюся членом. –

+0

Downvote Я не знаю, но проголосовал за закрытие в любом случае, поскольку это, вероятно, не полезно для будущих посетителей, и заголовок затрудняет обнаружение в любом случае. Что означает joachim: без 'simulator ::' компилятор рассматривает его как нормальную (как в, не член класса) функцию в глобальном пространстве имен – stijn

ответ

4

Используйте метод simulator::add_object, так как это метод класса, как и для конструктора и деструктора.

+0

О, боже мой. Я не могу поверить, что совершил эту ошибку. Спасибо огромное! – finnrayment

3

По сравнению с Java вы можете определить функции вне определения класса (например, в дополнительном .cpp-файле, который обычно рекомендуется для этого), в этом случае вы должны добавить class_name:: к сигнатуре функции.

Если нет, потому что ваша функция не в пространстве имен класса, он становится , не являющийся член функции (то есть функция, которая принадлежит ни к какому классу), и он не знает objects элемента, который находится внутри вашего simulator класса ,

Смежные вопросы