我一直在教自己一些使用SFML创建窗口/处理输入的OpenGL等等。我的main.cpp开始变得有些笨拙,所以我决定开始拆分我的代码。我创建了一个4X_vertex.h和一个4X_vertex.cpp(4X是项目的名称)并将相关的函数和结构移出我的main并进入这些文件。但是,当我编译时,我收到错误
variable or field "drawVertexArray" declared void
我的研究似乎只是一个与下一个错误有关的无用信息,即
vertex was not declared in this scope
以下是我的main.cpp
:
#include <iostream>
#include <fstream>
#include <string>
#include <SFML/System.hpp>
#include <SFML/Window.hpp>
#include <SFML/Graphics.hpp>
#include "4x_vertex.h"
#include "4x_constants.h"
我的4X_vertex.h
:
#ifndef _4X_VERT_H
#define _4X_VERT_H
struct vertex{
GLfloat x,y,z;
GLfloat r,g,b;
};
void drawVertexArray(vertex v[]);
vertex* loadVertexData();
#include "4X_vertex.cpp"
#endif
4X_vertex.cpp
给我带来麻烦的部分:
using namespace std;
void drawVertexArray(vertex v[]){
... openGL stuff...
}
所有这一切都在我开始移动它之前有效,所以我假设有一些奇怪的东西,包括,或者什么。非常感谢所有帮助!
答案 0 :(得分:1)
只是一些指示。最佳做法是将项目划分为多个源文件。通常,您可以在主源文件的文件名中使用“main”一词(如果适用)。所以你可能会有类似......
main.cpp
feature1.cpp
feature2.cpp
tools.cpp
对于您的其他文件,您通常会在它们实现的类之后命名它们。您通常会同时拥有.h和.cpp。将您的声明放在.h中,而.cpp中的定义包含.cpp .h。那可能会给你......
main.cpp
feature1.cpp feature1.h
feature2.cpp feature2.h
tools.cpp tools.h
引用其中一个类的模块也包括它.h。所以,main.cpp可能看起来像......
#include <iostream>
#include "feature1.h"
#include "feature2.h"
using namespace std;
void main(int argc, char **argv)
{ ...
cout << "Done!\n";
}
并且feature1.cpp可能是......
#include "feature1.h"
#include "tools.h"
feature1_class::feature1_class() { ... }
void feature1_class::AUsefulFeature(int val) { ... }
//etc.
...其中feature1.h声明了类,定义了常量等等,例如,
#ifndef FEATURE1
#define FEATURE1
#include "tools.h"
class feature1_class
{
public:
feature1_class();
void AUsefulFeature(int val);
int APublicMember;
};
#endif
你可能已经注意到tools.h实际上在feature1.cpp中包含了两次。它包含在feature1.h中,并明确地来自.cpp文件。如果在.h文件中使用以下模式...
#ifndef TOOLS_H
#define TOOLS_H
//... do your thing
#endif
...然后多个包含不应该导致任何问题。当您重构代码时,不必担心清理代码。
如果您到目前为止所有来源都使用过单个文件,那么您可能一直在编译......
cl main.cpp
它为您提供.exe和.obj以及其他文件。但是涉及多个源文件,它并没有太大的不同。你可以说......
cl main.cpp feature1.cpp feature2.cpp tools.cpp
还有很多东西值得学习,但这是一个开始,可以帮助您更好地组织编码思想。
答案 1 :(得分:0)
您需要#include "4X_vertex.h"
文件顶部的4X_vertex.cpp
。这将允许.cpp
文件查看struct vertex
的声明。
通常,每个文件(.h和.cpp文件)都需要#include
任何包含该文件中使用的项目声明的头文件。这包括标准标题和OpenGL标题,以及您的自定义标题。