未定义引用类函数问题

时间:2009-08-01 21:55:41

标签: c++ linker undefined-reference

我已经仔细研究了互联网和我自己的智慧来回答这个基本问题,然而,令我沮丧的是,我一直无法找到解决方案。我通常对多个头文件非常好,但是我已经碰壁了。问题是我在头文件中声明并在源文件中的适当命名空间中定义的函数。我正在使用Bloodshed开发Windows。

///////////////////////////////     //类Matrix4x3.h     ///////////////////////////////

#ifndef _MATRIX4X3_H
#define _MATRIX4X3_H

class Matrix4x3{
    public:

        //set to identity
        void identity();

};

#endif

/////////////////////////////// //类Matrix4x3.cpp ///////////////////////////////

#include <assert.h>
#include <math.h>
#include "Matrix4x3.h"
.
.
.
void Matrix4x3::identity(){
    //calculations here...
}

//////////////主////////////////

#include <cstdlib>
#include <iostream>

#include "../Matrix4x3.h"

using namespace std;

int main(int argc, char *argv[])
{
    Matrix4x3 a;

    a.identity();

    cin.get();
    return EXIT_SUCCESS;
}

我使用Bloodshed,当我使用构造的对象时它会显示一个类成员和方法的列表,但是它告诉我上面描述的方法没有被引用到编译时。如果有人有回应我会非常感激。

2 个答案:

答案 0 :(得分:3)

如果使用IDE进行编译,请查找“添加文件到项目”之类的按钮或类似的按钮,将Matrix4x3.cpp文件添加到项目中,以便在构建时,IDE将放置转换结果到链接器并解决所有功能。

目前,您似乎没有告诉IDE有关该cpp文件的信息,因此从不考虑函数定义。

答案 1 :(得分:0)

我认为litb has it right


在完全不相关的注释中,您可能需要查看模板,以便您可以使用此类:

template <size_t Rows, size_t Columns>
class Matrix
{
    ...
};

typedef Matrix<4, 3> Matrix4x3;

而不是每个矩阵大小的新类。您也可以将类型抛入混合中:

template <size_t Rows, size_t Columns, typename T>
class Matrix
{
    ...
};

typedef Matrix<4, 3, float> Matrix4x3f;
typedef Matrix<4, 3, double> Matrix4x3d;

或者查看boost