这真让我感到困惑。出于某种原因,我得到了一个
来自编译器的“c1未在此范围内声明”
错误。我是使用Code :: Blocks的usig Mingw。我会假设全局变量是程序的全局变量?我错了吗? TYIA -Roland
// main.h
#include <iostream>
#include "classone.cpp"
#include "classtwo.cpp"
extern AnotherClass c2;
extern TheClass c1;
----------
// main.cpp
#include "main.h"
AnotherClass c2;
TheClass c1;
int main()
{
c1.function5();
c2.function2();
return 0;
}
----------
//classone.h
#include "main.h"
class AnotherClass {
`
public:
void function2();
void function3();
private:
int varone;
int vartwo;
};
----------
// classone.cpp
#include "classone.h"
void AnotherClass::function2() {
std::cout << "Function 2 Check\n";
}
void AnotherClass::function3() {
std::cout << "Function 3 Check";
}
----------
// classtwo.h
#include "main.h"
class TheClass {
public:
void function4();
void function5();
};
----------
// classtwo.cpp
#include "classtwo.h"
void TheClass::function4() {
c1.function2();
std::cout << "Function 2 Check\n";
}
void TheClass::function5() {
std::cout << "Function 3 Check";
}
答案 0 :(得分:4)
包含.cpp这样的文件非常愚蠢 - 只包含标题。
无论如何,将main.h更改为:
#include <iostream>
extern AnotherClass c2;
extern TheClass c1;
将此添加到main.cpp:
AnotherClass c2;
TheClass c1;
然后在每个需要它的文件中包含main.h
,如下所示:
// classtwo.cpp
#include "classtwo.h"
#include "main.h"
void TheClass::function4() {
c1.function2();
std::cout << "Function 2 Check\n";
}
void TheClass::function5() {
std::cout << "Function 3 Check";
}
此外,如果您还没有警卫,则需要包括警卫。
答案 1 :(得分:0)
如果要在单个文件中编译所有代码,则需要在.cpp文件中包含类声明。在classtwo.cpp里面插入#include“classtwo.h”并对两个文件顶部的classone执行相同的操作。
标准做法是将类代码与客户端代码分开,因此您应该将类编译到库中并将其链接到主程序。
答案 2 :(得分:0)
您的main .h
需要包含2个类的.h
个文件才能生效。您不需要(也不应该)包含.cpp
个文件。