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 が翻訳結果をリンカーに配置し、すべて機能が解決されます。

現在、その cpp ファイルについて IDE に通知していないように見えるため、その関数定義は考慮されません。

于 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;

またはブーストを調べてください。

于 2009-08-01T22:12:47.690 に答える