Включает в Eclipse Mars Stack Overck

Я определил функцию 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 файл?

0

Решение

Чтобы получить доступ 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это в любом исходном файле.

0

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]