a.h
クラスの定義
a.cpp
クラスのメンバ関数の定義
b.h
#include "a.h"
クラスの定義
b.cpp
クラスのメンバ関数の定義
----c.cpp----
#include "a.h"
#include "b.h"
a.hで定義したクラスの宣言
b.hで定義したクラスの宣言
メインの処理
-----------------------------------------
b.cppで定義しているクラスのメンバ関数にて
a.cppで定義したクラスのメンバ変数にアクセスしたいのです。
どうするのが一番良いのでしょうか?
a.cppにメンバ変数を返すだけの関数を定義してb.cppでc.cppで宣言したa.hのクラスを
extern宣言してみたのですがエラーが出てコンパイルが通らないです。
No.4
- 回答日時:
>すいません。
うまく説明出来ずに冗長になってしまいました。冗長ではなく情報が不足してるといってるんですけど。
>エラーは
>error LNK2001: 外部シンボル ""class Node_Access Node" (?Node@@3VNode_Access@@A)" は未解決です。
#1には「どういったソースを書きましたか」とも書いてると思うんですが。
とりあえず、そのエラーメッセージから思いつくのはソースの分割はしたけどリンク時にまとめることをやってないってとこでは。
この回答への補足
---------main.cpp--------------
#include "DxLib.h"
#include <vector>
#include "path.h"
#include "charcter.h"
using namespace std;
int WINAPI WinMain(HINSTANCE,HINSTANCE,LPSTR,int){
Node_Access Node;
Charcter_Access Ch;
vector<int> path;
DxLib_Init();
Node.Node_init();
Ch.Charcter_init();
path = Node.Node_dijkstra(0,4);
Node.Node_Draw(path);
Ch.Charcter_Draw();
DxLib_End();
return 0;
}
------------path.cpp----------------
#include "DxLib.h"
#include <vector>
#include <fstream>
#include <string>
#include <math.h>
#include <limits.h>
#include "path.h"
using namespace std;
//初期化用の関数の定義
void Node_Access::Node_init(void){
}
//2点のコストを求める
void Node_Access::Get_Distance(void){
}
//座標を指定
void Node_Access::Node_Datain(void){
}
//ノードの描画を定義
void Node_Access::Node_Draw(vector<int> path ){
}
//最短経路をダイクストラ法で導く
vector<int> Node_Access::Node_dijkstra(int s,int e){
}
//ノードのx座標を返す。
int Node_Access::ReNode_x(int Num){
return Node[Num].x;
}
//ノードのy座標を返す。
int Node_Access::ReNode_y(int Num){
return Node[Num].y;
}
//ノードの総数を返す。
int Node_Access::ReNode_Num(void){
return Node.size();
}
-------path.h-----------------
#ifndef _PATH
#define _PATH
#include <vector>
using namespace std;
typedef struct _NODE{
}NODE_t;
typedef struct _MINNODE{
}MINNODE_t;
class Node_Access{
private:
vector<NODE_t> Node;
MINNODE_t min;
public:
void Node_init(); //初期化用関数宣言
void Node_Datain();//ノードに座標を指定
void Node_Draw(vector<int> path); //ノードの描画宣言
vector<int> Node_dijkstra(int s,int e);
void Get_Distance();//2点間の距離を求める
int ReNode_x(int Num);//x座標を返す
int ReNode_y(int Num);//y座標を返す
int ReNode_Num(); //ノードの総数を返す。
};
#endif
----charcter.cpp--------
#include "charcter.h"
#define CNUM 3
extern Node_Access Node;
//キャラクター初期化用関数の定義
void Charcter_Access::Charcter_init(void){
ここでNode の総数を返す関数を使いたいです。
}
//キャラクター描画用関数定義
void Charcter_Access::Charcter_Draw(void){
}
---------charcter.h------------
#ifndef _CHARCTER
#define _CHARCTER
#include <vector>
#include "DxLib.h"
#include <time.h>
#include "path.h"
using namespace std;
typedef struct _CHARCTER{
int x,y; //キャラ座標
int NowNode; //現在いるノード位置
int GoalNode; //目的のノード
vector<int> root; //ルートを格納
}CHARCTER_t;
class Charcter_Access{
private:
vector<CHARCTER_t> Ch;
public:
void Charcter_init(); //初期化用
void Charcter_Draw(); //描画用
};
#endif
No.3
- 回答日時:
具体的にどんなエラーですか?
----c.cpp----
#include "a.h"
#include "b.h"
で、 b.h の中にも #include "a.h" があるので、二重定義になってしまっている、というのが一番ありそうですが。
No.1
- 回答日時:
>a.cppにメンバ変数を返すだけの関数を定義してb.cppでc.cppで宣言したa.hのクラスをextern宣言してみたのですがエラーが出てコンパイルが通らないです。
具体的に、どのようなソースを書いて、どのようなエラーが出たんですか。
丁寧に説明されてるつもりなんでしょうが読み手としては何を書いてるのかわかりません。
この回答への補足
すいません。うまく説明出来ずに冗長になってしまいました。
要するに別のソースに宣言したクラスを扱う方法がわからなのです。
エラーは
error LNK2001: 外部シンボル ""class Node_Access Node" (?Node@@3VNode_Access@@A)" は未解決です。
と出ます。これで調べたのですが良くわからず解決に至ってないです。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- その他(プログラミング・Web制作) pythonのプログラムについての質問です。 1 2023/05/26 10:31
- C言語・C++・C# const char** p;のとき、free(p)でC4090エラーとなるのはなぜですか 3 2023/03/31 16:28
- その他(プログラミング・Web制作) どういうプログラムで組みますか?google colabでやってるんですけど、出来る方お願いします。 1 2022/07/06 09:28
- C言語・C++・C# C言語 2 2022/07/21 00:02
- その他(プログラミング・Web制作) このプログラミングをどう組みますか? Googlecolabでやってるんですが、出来る方お願いします 1 2022/07/13 10:52
- その他(プログラミング・Web制作) どういうプログラムで組みますか?google colabでやってるんですけど、出来る方お願いします。 1 2022/07/17 18:41
- Java JavaのSingletonパターンのprivateの持つ意味が分かりません。 5 2022/06/12 10:38
- 物理学 内積 3 2022/12/04 18:41
- C言語・C++・C# メインプログラムに#include <algorithm>を書いて、 そのメインプログラムが // 3 2023/05/02 11:24
- C言語・C++・C# C# 継承の問題で programに示された拡張をすべて含んだ上で,クラス Mammal に,そのオ 1 2022/07/22 09:48
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
既定のコンストラクタがない?
-
FriendとPublicの違い。。。
-
DebugクラスとTraceクラスの違い
-
WindowsAPIのリストビューの...
-
(UWSC) 「#32770」の意味わかり...
-
C#のクラス設計について教えて...
-
protected override について
-
VB.NETでのEnumの使用について
-
継承を重ねた場合のコストはど...
-
C++でJavaのStaticイニシャライ...
-
MFCアプリのコマンドラインでパ...
-
DataGridViewのセルに斜線を引...
-
C++/CLIからC++の呼び出しで例外
-
継承したクラスを、継承元のク...
-
ダイアログ表示時にチェックボ...
-
CMainFrameクラスの使い方
-
イベントにAddHandlerされてい...
-
エディットコントロールでEnter...
-
ダイアログクラスのコントロー...
-
OnPaintとOnDraw関数の違いにつ...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
FriendとPublicの違い。。。
-
既定のコンストラクタがない?
-
(UWSC) 「#32770」の意味わかり...
-
クラスのアドレスを引数として...
-
ダイアログ表示時にチェックボ...
-
イベントにAddHandlerされてい...
-
【ASP.NET】 独自で作成したク...
-
MFCアプリのコマンドラインでパ...
-
DebugクラスとTraceクラスの違い
-
ボタンのオーナードローについて
-
OnInitDialog()の関数の組み込み方
-
IncludeではなくClassで宣言す...
-
関数の呼び出し元の検索
-
このコンパイルエラーの意味に...
-
C++ protectedにアクセス不可
-
C++で継承元のクラスの代入演算...
-
DataGridViewのセルに斜線を引...
-
C#で通常のbuttonコントロール...
-
エディットコントロールのイベ...
-
CMainFrameクラスの使い方
おすすめ情報