C ++エラー:変数または関数は、ヘッダファイルに定義され

C ++エラー:変数または関数は、ヘッダファイルに定義され


1.背景

  4つのファイルの合計b.cpp a1.cpp、a2.cpp、BHを含み、C ++プロジェクトでは、現在ありません。

ファイルリスト

エラーの2例

  BH声明クラスB、SUMはint型を定義しながら、() b.cppはB(int型×1、INT×2)を定義します 。a1.cppはメインファイルで、クラスBを呼び出します a2.cppまた、クラスBを呼び出します

BHコードは以下の通りであります:

#pragma once
class B
{
public:
	int b1;
	int b2;
	B(int x1, int x2);
	int sum();
};

int B::sum()
{
	return b1 + b2;
}

b.cppのコードは以下の通りであります:

// 编程工具:vs2017

#include "pch.h"
#include "b.h"

B::B(int x1, int x2)
{
	b1 = x1;
	b2 = x2;
}

a1.cppのコードは以下の通りであります:

// 编程工具:vs2017

#include "pch.h"
#include <iostream>
#include "b.h"
using namespace std;

int main()
{
	B b(1, 2);
	cout << b.sum();
	return 0;
}

a2.cppのコードは以下の通りであります:

// 编程工具:vs2017

#include "pch.h"
#include <iostream>
#include "b.h"
using namespace std;

int a2()
{
	B b(3, 4);
	cout << b.sum();
	return 0;
}

エラー一覧

エラーメッセージ:

1> ------生成が開始されました:プロジェクト:、コンフィギュレーション:デバッグのWin32 ------
1> a1.cpp
1> a2.cpp
1> B.cpp
1>コードの生成...
1> LINK :Cが見つかりません:\ Users \ユーザー管理を\デスクトップ \ A \デバッグ\ A.EXE または増分リンクの上に生成されません。完全なリンクを行う
1> a2.obj:エラーLNK2005: "パブリック:int型__thiscallのB :: "(?合計(無効)の和 B @@ QAEHXZは@) でa1.objで定義されている
:エラーLNK2005 1> B.OBJ"パブリック:int型__thiscallのB ::合計(無効)「(サムB @ @@? QAEHXZは)でa1.objで定義されている
1> C:\ Users \ユーザー管理 \デスクトップ\ A \デバッグ\ A.EXE:致命的なエラーLNK1169: の一個の以上の乗算定義されたシンボルを見つける
1>プロジェクト「の構築を完了しました。 vcxproj「 -失敗しました。
==========ビルド:0成功、失敗、0最新の、0スキップ==========

3.正しいアプローチ

  ではBHのみ声明の中で作られたb.cpp定義について。修正BHコードは次のとおりです。

#pragma once
class B
{
public:
	int b1;
	int b2;
	B(int x1, int x2);
	int sum();
};

修正b.cppのコードは次のとおりです。

// 编程工具:vs2017

#include "pch.h"
#include "b.h"

B::B(int x1, int x2)
{
	b1 = x1;
	b2 = x2;
}

int B::sum()
{
	return b1 + b2;
}

結果:
業績

4.まとめ

  唯一の宣言用のヘッダファイルでは、それが定義されていません。
  場合すべての定義と宣言、及び削除b.cppのa2.cpp、保持a1.cppコールクラスB(BHなどのようなヘッダファイルデータと呼ばれる唯一のファイルは、唯一a1.cpp使用する#include「BH」ものの)、プログラムは文句はありません。
  複数のファイルは、このようなb.cpp、a2.cpp、a1.cppとしてヘッダファイルデータを、呼び出したときしかし、の#include「BH」を含まれており、プログラムはエラーになります。

公開された77元の記事 ウォン称賛25 ビュー10000 +

おすすめ

転載: blog.csdn.net/qq_34801642/article/details/103718421