很抱歉问初学者问题。我很熟悉Java,C#...... 但我必须用C ++编写一个OpenGL程序,有些东西我不明白:
我必须解析一个文本文件来获取顶点并将它们放入一个向量中。所以我写了一个方法来接收我的Vertex对象向量。 它在我调用它之前定义方法时起作用
std::vector<AESParser::Vertex> vertices;
void parseVertices(std::vector<AESParser::Vertex> &verts){
...
}
...
parseVertices(vertices);
但是反过来做错了。所以我理解我必须在头文件中声明它。所以我写了这样的话:
*** Header ***
class AESParser
{
public:
struct Vertex{
float x;
float y;
float z;
};
AESParser();
virtual ~AESParser();
void read();
protected:
private:
int readNumVertices(std::fstream &stream);
int readNumFaces(std::fstream &stream);
void parseVertices(std::vector<Vertex> &verts);
Vertex readVertex(std::fstream &stream);
};
我知道可能会有更多的错误,因为我从来没有做过C ++,但主要的问题是,我得到以下错误信息:
undefined reference to `AESParser::parseVertices(std::vector<AESParser::Vertex, std::allocator<AESParser::Vertex> >&)'
因此“parseVertices()”方法似乎有些问题,我看不出是什么。它适用于其他像“readNumVertices()”。
感谢您的帮助!
答案 0 :(得分:4)
您的函数属于AESParser
类,因此您需要将其定义为
void AESParser::parseVertices(std::vector<AESParser::Vertex> &verts){
...
}
将函数定义写为
时void parseVertices(std::vector<AESParser::Vertex> &verts)
然后它是一个自由函数(不属于一个类),碰巧具有相同的名称,返回相同的类型,并采用相同的参数。但它是一个不同的功能。
请注意,在第一个版本中,函数名前面附加了AESParser::
范围。