1

我已经搜索了互联网和我自己的智慧来回答这个基本问题,但是,令我沮丧的是,我一直无法找到解决方案。我通常对多个头文件非常满意,但是我碰壁了。问题是我在头文件中声明并在源文件的适当名称空间中定义的函数。我正在使用 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,当我使用构造对象时它会显示类成员和方法的列表,但是它告诉我上面描述的方法在编译时没有被引用。如果有人有回应,我将不胜感激。

4

2 回答 2

3

如果您使用 IDE 进行编译,请查找“将文件添加到项目”之类的按钮,以将Matrix4x3.cpp文件添加到您的项目中,这样当您构建它时,IDE 会将翻译后的结果放入链接器和所有功能得到解决。

Currently, it looks like you don't tell the IDE about that cpp file, and so that function definition is never considered.

于 2009-08-01T22:44:04.803 回答
0

我认为litb 是对的


在一个完全不相关的注释上,您可能想要查看模板,以便您可以拥有这个类:

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

于 2009-08-01T22:12:47.690 回答