0

クラスファイルがあります:grid.cpp

#include <iostream>
#define SIZE 10
using namespace std;
class Grid
{
private:
    char **ptr;

public:
    Grid(void);
    void show();
};

Grid::Grid()
{
    // sth ...
}

void Grid::show()
{
    // sth ...
}

メイン クラスをビルドすると、コンパイラが失敗します。

|15|multiple definition of `Grid::Grid()'| 
|28|multiple definition of `Grid::show()'|

どうしたの?

4

2 に答える 2

2

問題はinline、ヘッダーに非定義を保持することです。また:

  • 定義を実装ファイルに移動します
  • それらを作るinline。これは、次の 2 つの方法で実現できます。
    • 明示的にマークします:inline void Grid::show() { .... }
    • 定義をクラス定義内に移動すると、暗黙的にinline

また、インクルード ガードを使用します (ただし、別のエラーが発生します)。

于 2012-12-20T11:09:50.737 に答える
1

.cpp.の代わりにファイルを含めている可能性があります.h

2 つのファイルに分割する必要があり.cppます。のコピーを 1 つだけ、.cpp好きなだけコピーします.h.( を使用#include)。

ファイルは、コンパイラに渡される前に前処理されます。#includeインクルードされたファイルの内容を現在のファイルに直接コピーするだけであることがわかります。C++複数の宣言には対応できますが、複数のnon-inline定義には対応できません。インライン クラス関数定義がある場合は、その定義のみを使用してください。

于 2012-12-20T11:11:15.467 に答える