Вопрос:
У меня проблемы с этим. Если я определяю объект в 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 класса.