Как использовать объект c++, определенный в другом файле?

Вопрос: У меня проблемы с этим. Если я определяю объект в main.cc, как мне получить доступ к этому объекту из другого.cc файла? main.cc: #include "Class.h" #include "header.h" int main() { Class object; return 0; } file.cc: #include "header.h" void function() { object.method(parameter); } Что мне нужно добавить в header.h, чтобы это работало? Любая помощь будет

Вопрос:

У меня проблемы с этим. Если я определяю объект в main.cc, как мне получить доступ к этому объекту из другого.cc файла?

main.cc:

#include «Class.h» #include «header.h» int main() { Class object; return 0; }

file.cc:

#include «header.h» void function() { object.method(parameter); }

Что мне нужно добавить в header.h, чтобы это работало? Любая помощь будет оценена по достоинству.

Лучший ответ:

как мне получить доступ к этому объекту из другого.cc файла? Что мне нужно добавить в header.h, чтобы это работало?

Простым ответом является “передать объект по ссылке”.

Объект, созданный в main(), длится для всей программы. Это типично для встроенных систем… У меня нет проблем с этим аспектом.

Однако я бы поставил долговременный объект в динамическую память (потому что стек более ограничен).

main.cc:

#include «Class.h» #include «header.h» int main() { Class* object = new Class; function(*object); // <— pass the object by reference return 0; }

file.cc:

#include «Class.h» #include «header.h» void function(Class& object) // <— how to specify reference { object.method(parameter); // <— you did not identify parameter }

header.h

class Class; // <— poor name choice void function (Class& object); // <— another poor name choice // note that the compiler needs to know only that Class is a // user defined type — the compiler knows how big a reference // or ptr to the class is, so you need not provide more Class info // for this file

Конечно, вам все равно нужно написать Class.h и определить класс

Обновление. Вы отметили это сообщение как C++.

Итак, рассмотрите следующее (что оборачивает проход по дилемме):

main.cc:

#include «Class.h» #include «header.h» int main() { Class* object = new Class; // // I recommend you do not pass instance to function. // // Instead, the C++ way is to invoke an instance method: object->function(); // and, if you’ve been paying attention, you know that the method // Class::function() // has access to the ‘this’ pointer of the class // and thus the ‘passing’ of this instance information // is already coded! // some of your peers would say you must: delete object; // others would say this is already accomplished by the task exit. return 0; } Ответ №1

Если бы вы попытались что-то вроде…

file.cc:

#include main.cc

Компилятор будет компилировать main.cc дважды – это означает, что он увидит 2 определения всего в main.cc. Это вызовет некоторые проблемы.

Он лучше проектирует (и на самом деле правильно компилирует! Бонус!), Чтобы создать пользовательский заголовочный файл для ваших классов, а затем импортировать его по мере необходимости.

myclasses.h:

Class object;

file.cc:

#include myclasses.h Ответ №2

Это очень плохой дизайн. вы не должны создавать объект класса в int main и использовать его в других классах. это ухудшит вашу программу и создаст больше ошибок. Пожалуйста, прочитайте о int main() и о том, для чего он используется. В основном все эти методы в заголовочных файлах являются своего рода API для других классов или программ.

Поэтому лучше создать объект класса в другом методе открытого класса и предоставить способ доступа к этому объекту через новый API класса, как было предложено выше.

Еще одна вещь, чтобы его очистить – не пытайтесь получить доступ к методам и свойствам, установленным в int main(). Предполагается, что int main() должен вводить ввод для методов, предоставляемых API класса.

Оцените статью
Добавить комментарий