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

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

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

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

Q&A

解決済

1回答

1348閲覧

C++でのTemplateの実装方法について質問です。

kanade

総合スコア23

C++

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

0グッド

0クリップ

投稿2016/12/01 11:44

###状況
Visual Studio 2015 で C++ を用いコードを書いていたところ疑問が生じたため質問をさせて下さい。

###発生している問題
templateを用いたコードを初めて書いていたのですが、templateの実装は宣言に書けば良いと聞き、

C++

1class GameObject 2{ 3private: 4 std::vector<Component*> vComponent; 5public: 6 template<class T> 7 void addComponent() 8 { 9 // 処理 10 } 11};

と書いていたところ、一度実行してからaddComponent()ブロック内の処理のみを書き換え、再び実行しても二度目の変更が適用されないことに気づきました。

例えば、
はじめにaddComponent()に std::cout << "one" << std::endl; と記述してから実行し、
次に、std::cout << "two" << std::endl; と記述してから再び実行をしてもコンソールには「one」と描画されてしまいます。

また、文法エラーの警告?(赤い波線)なども一切出ません。template<class T>の部分のみコメントアウトすると出るようになるのですが。。。

どのようにすればこの問題を解決できるでしょうか。

ご回答宜しくお願い申し上げます。

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

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

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

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

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

guest

回答1

0

ベストアンサー

こんにちは。

その現象はテンプレートには無関係と思います。
リビルドしてみると解決するかも知れません。
ファイルの日付時刻が可笑しくなってコンパイルされないような場合も稀にありますので。

投稿2016/12/01 12:29

Chironian

総合スコア23272

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

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

kanade

2016/12/01 13:06

こんにちは。 ご返信ありがとうございます。 おっしゃったとおりにリビルドしてみたところ変更が適用されましたが、その後はやはりダメだした。 例えば、addComponent()のブロック内にhogehogeと書いてもエラーが出ません。リビルド時にはでたのですが。。。 変更を認識してくれないみたいです。
Chironian

2016/12/01 13:27

そのような症状に出会ったことはないので確信はないですが、PCの時計がおかしくなっているのかも知れません。PCの日付・時刻を確認して見てください。 ファイルの更新はファイルの更新時刻で検出されます。 他には、プロジェクトが可笑しくなっている可能性も0ではないので、プロジェクトを1から作り直してみても良いかもです。 それでもダメならVisual Studioの再インストールも考えられます。 最悪、Windowsの再インストールです。でも、その前にやれることが他にもある筈です。
kanade

2016/12/01 13:45

ありがとうございます。 PCの時計は正常でした。また、プロジェクトについても、新規プロジェクトを作成し試してみましたがダメでした。 「template<class T>」が存在するとブロック内の構文エラーが検出されなくなります。ですが「template<class T>」をコメントアウトするとその瞬間に赤い波線が表示されるようになります。 只今原因を探しているのですが、もし何か手がかりのようなものがあれば助かります。
Chironian

2016/12/01 14:19

経験上「赤い波線」はあてにならないです。コンパイルに通る時でも表示されることが結構あります。 テンプレートにしない普通の関数でも恐らく同じ現象(ソースを変更してもビルドではコンパイルされない。リビルドならコンパイルされる)が起きると思います。 普通の関数で再現できたら改めて質問を立てた方が、多くの人に質問を見て貰えると思いますよ。 同じ現象に遭遇したことがある人に見て貰えたら解決できるかも。
kanade

2016/12/01 14:25

わかりました。 何度もご丁寧にありがとうございました。 解決はできませんでしたが大変参考になりました。 また何か機会がありましたらまたよろしくお願いします。
Chironian

2016/12/01 14:57

いいえ。お役に立てなくてすいません。こちらこそ宜しく。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問