包含在 Eclipse Mars C++ 中

Includes in Eclipse Mars C++

我在 Main.cpp 文件中定义了函数 int getRandomNumber()。在这个文件之外,还有class个文件,由头文件和class个文件组成。

出于某种原因无法从其他 class 文件中访问函数 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;
}

为什么 "Created"、"Tested" 和 "Destroyed" 都打印到控制台,即使 ClassName.cpp 文件从未明确包含在任何地方?

为什么无法从 ClassName.h 文件访问 int getRandomNumber(),即使预处理器将其粘贴到包含它的位置?同样的事情也适用于 <iostream>。为什么它需要再次包含在 .cpp 文件中?

要从多个位置访问 getRandomNumber(),您可以将其移动到 header,然后将其包含在需要该函数的所有源文件中:

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

现在您可以通过在任何源文件中 #include 访问 getRandomNumber()