質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.50%
C++

C++はC言語をもとにしてつくられた最もよく使われるマルチパラダイムプログラミング言語の1つです。オブジェクト指向、ジェネリック、命令型など広く対応しており、多目的に使用されています。

Q&A

1回答

2479閲覧

C++のテンプレートと構造体の連携における多重リンカエラー

Piyoshi

総合スコア24

C++

C++はC言語をもとにしてつくられた最もよく使われるマルチパラダイムプログラミング言語の1つです。オブジェクト指向、ジェネリック、命令型など広く対応しており、多目的に使用されています。

0グッド

1クリップ

投稿2014/12/30 18:02

いつもありがとうございます。

現在C++のリンカエラーで困っています。
具体的には以下のようにテンプレートを構造体に対して使用し、ヘッダファイルに定義を記述してプログラムを記述していると起こりました。

lang

1// header1.h 2#ifndef _H1_ 3#define _H1_ 4template<typename Type> 5struct 2D_ 6{ 7 Type x; 8 Type y; 9}; 10typedef 2D_<float> Real2D; 11typedef 2D_<int> 2D; 12#endif

lang

1// header2.h 2#ifndef _H2_ 3#define _H2_ 4#include "header1.h" 5unsigned char t(2D a, 2D b, int c) 6{ 7 ... 8} 9#endif

lang

1// main.cpp 2#include "header2.h" 3int main() 4{ 52D a; 62D b; 7a.x = 10; 8a.y = 20; 9b.x = 30; 10b.y = 40; 11t(a, b, 100); 12return 0; 13}

エラーメッセージは以下のようになっていました。
「_main.cpp.obj:error LNK2005:struct 2D<int>は既に定義されています。__」
どなたかテンプレートと構造体の連携に関してアドバイスを頂けたらと思います。

よろしくお願いします。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

同じエラーにはならなかったですが、ひとまず 2D のような数字から始まる識別子は不可だったと思います。

投稿2014/12/31 00:41

ngyuki

総合スコア4514

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

Piyoshi

2014/12/31 11:27

ご指摘ありがとうございます。 実際に作成しているプログラムはもっと規模が大きく識別子も違うのですが、質問の手間などを考えて省略していました。すみません... また、エラーも今朝解決できたので問題がなくなりました。 お手数をおかけしました。
cateye

2016/10/08 08:28

解決したら解決済みにしましょうd^^ 出来れば解決方法を書いていただくと、同じ問題に直面した人の助けになります。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

会員登録して回答してみよう

アカウントをお持ちの方は

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.50%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問