Я определил функцию int getRandomNumber()
в моем Main.cpp
файл. За пределами этого файла существуют классы, состоящие из заголовочных файлов и файлов классов.
Функция int getRandomNumber()
по какой-то причине недоступен из других файлов классов, даже если он предположительно глобален.
Код в Main.cpp
выглядит примерно так:
#include <iostream>
using namespace std;
int getRandomNumber() {
return 4; // Chosen by fair dice roll
}
#include "folder/ClassName.h"
int main(int argc, char* argv[]) {
ClassName t;
t.test();
return 0;
}
Внутри ClassName.h
выглядит примерно так:
#ifndef SRC_CLASSNAME_H_
#define SRC_CLASSNAME_H_
class ClassName {
public:
ClassName();
virtual ~ClassName();
void test();
};
#endif /* SRC_CLASSNAME_H_ */
Наконец, внутренности ClassName.cpp
держать содержимое:
#include <iostream>
#include "ClassName.h"
using namespace std;
ClassName::ClassName() {
cout << "Created" << endl;
}
ClassName::~ClassName() {
cout << "Destroyed" << endl;
}
void ClassName::test() {
cout << "Tested" << endl;
}
Как получается, что «Создано», «Проверено» и «Уничтожено» все выводится на консоль, хотя ClassName.cpp
файл никогда явно нигде не включен?
Почему может int getRandomNumber()
не быть доступным из ClassName.h
файл, хотя препроцессор вставляет его туда, где он включен? То же самое относится и к <iostream>
, Почему его нужно снова включить в .cpp
файл?
Чтобы получить доступ getRandomNumber()
из нескольких мест вы можете переместить его в заголовок, который затем включите во все исходные файлы, для которых требуется эта функция:
MyHeader.h
#ifndef MYHEADER_H
#define MYHEADER_H
int getRandomNumber();
// ... other stuff here
#endif /* MYHEADER_H */
main.cpp
#include "MyHeader.h"
int getRandomNumber() {
return 4; // Chosen by fair dice roll
}
// ... other stuff here
Теперь вы можете получить доступ getRandomNumber()
от #include
это в любом исходном файле.
Других решений пока нет …