Кажется, я не могу заставить конструктор добавить экземпляр класса к вектору. Вот код, который я получил:
main.cpp
#include "object.h"
#include <iostream>
#include <vector>
vector <object> objects;
int _tmain(int argc, _TCHAR* argv[])
{
object foo(1);
objects.push_back(foo);
return 0;
}
object.h
class object {
public:
int foo;
object(int);
};
object.cpp
#include "object.h"
object (int foo) {
object::foo = foo;
}
Я хочу переместить этот objects.push_back (foo) в.cpp файл. Я пытался использовать extern, и это работает, за исключением одного: как мне ссылаться на объект, который строится внутри конструктора?
Заранее спасибо.
Прежде всего это
object foo();
это объявление функции, которое не имеет параметров, возвращает объект типа int.
Во-вторых, у вашего объекта класса нет конструктора по умолчанию. Он имеет конструктор с параметром.
object(int);
Поэтому, когда вы создаете объект типа объекта, вы должны указать аргумент.
Учтите, что это определение класса является синтаксическим недействительным
class object {
public:
int foo;
object(int)
}
Вы забыли поместить две точки с запятой: одну после объявления конструктора rge и другую после закрывающей скобки определения класса. Должно быть
class object {
public:
int foo;
object(int);
};
Также конструктор должен быть определен как
object::object (int foo) {
object::foo = foo;
}
Используйте this
указатель для ссылки на объект из своего конструктора.
Давайте рассмотрим следующий код, который является частью вашего основного:
class object {};
int main() {
object foo();
}
Этот код при компиляции под clang сообщает следующее:
foo.cc:4:15: warning: empty parentheses interpreted as a function declaration [-Wvexing-parse]
object foo();
^~
foo.cc:4:15: note: remove parentheses to declare a variable
object foo();
^~
1 warning generated.
Это известно в C++ как самый неприятный анализ.
Вы можете решить это, написав:
int main() {
object foo;
}
A foo(B());
в то время как это просто не очень неприятный анализ.
О, неважно. Нашел вопрос. Удалось использовать ключевое слово "this". Моя проблема заключалась в том, что это указатель и мои объекты, сохраненные в векторе. Поэтому я просто разместил:
objects.push_back(*this);
и это сработало! В любом случае, спасибо, возможно, это будет полезно для кого-то еще в будущем.
object foo();
не создаетobject
именемfoo
. Вместо этого он объявляет функцию с именемfoo
.