C++结构问题
C++ Structure Problems
我是一名Java开发人员,正在努力学习C++。作为一名Java开发人员,C++的多文件结构对我来说很奇怪,因为它被类宠坏了。
我正在尝试制作一个.cpp文件,它可以像Java类加载其他类一样加载其他.cpp文件。我的理解是,我有三个文件:main.cpp、filetobeload.h和filetobelloaded.cpp,它们都在同一个目录中。main.cpp将有一个
#include <filetobeloaded.h>
然后加载文件。h将具有
#ifndef LOOP_H
#define LOOP_H
void loop_start();
void loop_run();
void loop_init();
#endif /* LOOP_H */
当文件被加载时。cpp将具有
void loop_init(){
//load libraries here
}
void loop_start(){
//this loop runs as long as the user doesn't request the program to close.
//In that case, this function will return and the program will exit.
}
void loop_run(){
//render stuff here, call subroutines
}
显然,我做错了什么,因为我的编译器告诉我行
#include <filetobeloaded.h>
无效,因为该文件不存在。我已经检查过了,filetobeload.h和filetobelloaded.cpp都和main.cpp在同一个目录中。我不知道为什么它会出错。
问题:
为什么我会出现错误,以及如何修复它们?
有没有比我现在做的更好的方法将我的源代码划分为不同的文件?
您能用Java开发人员能够理解的方式解释C++多文件结构吗?
我正在尝试用OGL在C++中制作一个游戏。我之所以学习C++和Java,是因为速度快、内存泄漏少(我希望如此)以及Steam集成。
我没有一本关于C++的好书,我在互联网上搜索了很多。。。每个人似乎都有不同的方式来做这件事,这让我很困惑…
-
在include目录中执行
#include <...>
搜索(编译器特定的,通常是/usr/include
和一堆其他Linux目录,或Windows上的编译器安装目录),而#include "..."
搜索当前目录。确保使用正确的。 -
不,你做得对。
-
在C++中,有声明1和定义2。声明可以放在任何地方,在一个翻译单元中可以有任意多个相同名称的声明,但(非
inline
、非模板、非内部链接)定义最多只能在一个.cpp
文件(技术上称为"编译单元"或"翻译单元")中,否则在链接时会出现"多定义"错误。同样值得注意的是,定义也可以作为声明,但不能反过来。在C++中,不能像在Java中那样,在声明之前使用名称(函数、结构、变量等),但在大多数情况下,只需在使用点上方编写声明,就可以在定义之前使用名称。
头文件只是让您将声明(以及
inline
函数定义和模板定义)放在所有需要它们的文件中,而不必在每个.cpp文件中反复复制和粘贴它们。实际上,您可以在不使用头文件的情况下编写C++,但这将非常乏味,并且会有大量的代码重复。
1非定义声明示例:
extern bool bar;
class c;
int foo();
int foo();
int foo(); // Can have many declarations of the same name as long as they match
2定义示例(也是声明):
bool bar;
bool baz = false;
class c { int m; };
int foo() { return 45; }
int foo() { return 45; } // Error: multiple definition
应该是。。。
#include "filetobeloaded.h"
当包含当前目录中的文件时,需要将它们放在引号中,而不是放在现有的尖括号中。
#include <filetobeloaded.h> //only looks in the systems directory
在C++中,有两种形式的include
#include <somefile.h>
和
#include "somefile.h"
第一个只在系统目录中查找,而第二个也在当前目录中查找。
除了其他答案外,.cpp文件中还需要include
行
此外,我个人会将方法放在类中,而不是全局类中。C++有一个特性,可以让方法(和其他东西)全局可用,而不是在类中。
EDIT:由于函数不在类中,并且是全局定义的,因此不需要include
行。
另请参阅,https://stackoverflow.com/questions/21593/
这个问题可能被认为是重复的,但措辞与相关答案不同。从根本上讲,C标准并没有严格规定区别是什么,您必须查阅编译器的文档以获得明确的答案。
- 如何重构类层次结构以避免菱形问题
- 包含矢量指针的结构的内存释放问题
- 在类中返回结构时出现问题
- 我对数据结构、双向链表有一些问题
- C++模板类中结构的编译器问题
- 我的超类中的模板问题与结构定义
- 修改C++结构的特征成员时出现问题
- C++ 结构内部的unordered_map会导致内存泄漏问题吗?
- 指向包含对齐 C 结构C++类的 C 指针的对齐问题
- (ODR 使用问题)在不同文件中priority_queue名称相同的结构
- 在C++中循环访问自定义结构列表的小问题
- 在C++中对结构向量进行排序时出现问题
- 我想直接在结构中插入,但没有一种方法可以正确避免填充问题
- 我的堆栈和库存清单程序的结构有什么问题?
- 将字符数组转换为结构时出现问题. 结构的字符数组变量溢出
- 我应该如何在C++中使用结构体解决输入失败的问题?
- DNS 查询格式标头结构中的小字节序问题
- C++,类结构问题
- 使用初始化列表填充C++中的多维结构数组时出现问题
- 为<vtkDataArray> VTK 非结构化网格声明 vtkSmartPointer 类型的变量时出现问题