C++结构问题

C++ Structure Problems

本文关键字:问题 结构 C++      更新时间:2023-10-16

我是一名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在同一个目录中。我不知道为什么它会出错。

问题:

  1. 为什么我会出现错误,以及如何修复它们?

  2. 有没有比我现在做的更好的方法将我的源代码划分为不同的文件?

  3. 您能用Java开发人员能够理解的方式解释C++多文件结构吗?

我正在尝试用OGL在C++中制作一个游戏。我之所以学习C++和Java,是因为速度快、内存泄漏少(我希望如此)以及Steam集成。

我没有一本关于C++的好书,我在互联网上搜索了很多。。。每个人似乎都有不同的方式来做这件事,这让我很困惑…

  1. 在include目录中执行#include <...>搜索(编译器特定的,通常是/usr/include和一堆其他Linux目录,或Windows上的编译器安装目录),而#include "..."搜索当前目录。确保使用正确的。

  2. 不,你做得对。

  3. 在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标准并没有严格规定区别是什么,您必须查阅编译器的文档以获得明确的答案。