Visual Studio2008でヘッダファイルが更新されない

このQ&Aのポイント
  • C++で作成したプログラムで、Visual Studio2008を使用しています。
  • ヘッダファイルを変更しても反映されず、リビルドしても変更が反映されない問題が発生しています。
  • init.hファイルのファイル名を変更したり、includeファイルを書き換えることで問題が解決しますが、設定の方法がわからず困っています。
回答を見る
  • ベストアンサー

Visual Studio2008でヘッダファイルが更新されない

C++で、単純な計算プログラムを作成しています。 main.cとinit.hの2つのファイルで構成しています。2つとも、プロジェクトの親フォルダに入っています。 ヘッダファイルを変更して、ソリューションのリビルドをしても、ヘッダファイルの変更が反映されません。 構造体をヘッダファイルに記載していて、メンバを追加してリビルド後も反映されません。#defineでヘッダに記載していた定数を変数に変更しようとして、define文を消してリビルドしても、その値がずっと定数のままになってしまいます。 init.hファイルのファイル名をinit2.hに変更して、includeファイルも#include "init2.h"に書き換えてビルドすると反映されます。非常に不思議です。どこかVisual Studioの設定のような気がするのですが、環境設定の方法がわからず困っております。 どなたかご教示・ヒント・キーワード等よろしくお願いします。

質問者が選んだベストアンサー

  • ベストアンサー
  • hashioogi
  • ベストアンサー率25% (102/404)
回答No.2

同じファイル名のヘッダファイル(今回はinit.h)が2つできていたりしませんか ? 表示されているヘッダファイルとプロジェクトに登録されているヘッダファイルが別物であれば同じような現象になるような気がしますが ? 一度表示されているヘッダファイルを「閉じ」て、 (1)ソリューションイクスプローラのヘッダファイルにinit.hが登録されていたら、それを一旦削除して、もう一度追加しなおして、 (2)ソリューションイクスプローラのヘッダファイルにinit.hが登録されていなければ、追加して、 新しく登録されたinit.hを使用してみたらどうでしょうか。

yyamada10
質問者

補足

ご教示ありがとうございました。 最初にヘッダファイルのDefine定数を変更してビルドしました。mainではこの変更は反映されないことを確認しました。 (1)の削除のときに、「クリア」と「完全削除」を聞かれたので、init.hをあらかじめ別名でコピーしておいて、完全削除を選びました。するとinit.hファイルはディスクから完全削除されました。コピーしておいたヘッダファイルを戻します。この時点で、ビルドを実行するとソリューションエクスプローラにヘッダファイルがないのにビルドが実行できて、定数の変更も反映されることを確認しました。 何となく気持ち悪いのですが、(2)は不要のままプログラム開発してもビルドできてしまうのはどこかの設定が悪いのでしょうか? また、(1)を実行しないとヘッダファイルの変更が反映されないのはなかなか効率が悪く困っております。何か根本的な原因があるのでしょうか?(オプション設定等?)よろしくお願いします。

その他の回答 (1)

  • hidebun
  • ベストアンサー率50% (92/181)
回答No.1

普通はリビルドとかでいけると思うんだけど、何か壊れたのかな。 でも、そんなに単純なファイル構成なら、プロジェクトを再作成 しても大した手間ではないような気もする。 で、プロジェクトの親フォルダってなんだろかな。 ソリューションエクスプローラには、ソースファイル・ヘッダーファイル ってフォルダがあると思うんだけど、そこにそれぞれ、 main.c, init.hが表示されているということ?

yyamada10
質問者

補足

ご教示ありがとうございます。「親フォルダ」というあいまいな用語を使ってすみません。親フォルダは、プロジェクトのあるフォルダを意味していました。Windowsのエクスプローラ上、2つのファイルは、同一フォルダ内にあります。また、ご指摘のようにソリューションエクスプローラ上もプロジェクト内にあります。よろしくお願いします。

関連するQ&A

  • Visual C++ ヘッダー情報の反映

    ヘッダー内の定義(の変更)が反映されないことがあります。 例えば、 "stdafx.h"において #define a 123 と定義して、関数項目main.cppとfunc.cpp両方でaを使うとします。 もちろんどちらも最初に#include "stdafx.h"とインクルードしています。 ですがdefine定義を#define a 456のように変更し実行すると、 main.cpp内ではa=456で動作し、func.cpp内ではa=123で動作する。 というような症状がしばしば現れます。 Visual stadio 2008でプログラミングしています。 c++ 6.0のときも同様の症状が現れていたのですが、何か問題があるのでしょうか? よろしくお願いします。

  • Visual Studioに関する質問

    センサを使って工作しようと思うのですが,センサメーカーから提供されているプログラミングに #include <avr/interrupt.h> #include <avr/io.h> #include <avr/pgmspace.h> と記載されてました.自分はプログラム開発環境にVisualStudioC++2010Expressを 使用しているのですが,C\ProgramFile\Microsoft Visual Stdio\VC\Includeを確認してみたところ やはりこれらのヘッダファイルは存在しませんでした.そこで,これらのヘッダファイルを新たにVSに 追加しようと思うのですが,やり方がよくわかりません.どうすれば良いでしょうか?

  • C言語でヘッダファイルを自作する

    C言語で#defineを用いてヘッダファイルを作成したのですが、 作成したコンパイルするときにヘッダファイルがオープンできません。 参考にしている資料があるのですが、そこに書かれているサンプルプログラムを 丸ごとコピーして作ったプログラムも同様にヘッダファイルがオープンできない というエラーが出るので、ヘッダファイルを定義する方法そのものが間違っていると 思うのですが、どこが間違っているのでしょうか? よろしければ正しい記述方法もお教えください。 #include <stdio.h> #if !defined SAMPLE_H #define SAMPLE_H wa(int a, int b) { return a+b; } #endif #include "sample.h" int main(){ printf("%d\n",wa(40,70)); return 0; } ヘッダファイルの定義の方法は他にもあるとは思いますが、 今回は#defineを用いた方法でお願いします。

  • ヘッダファイルの2重のインクルードについて

    ある書物に「ヘッダファイルを複数回インクルードすると、それを”再定義”することによるエラーになる」と書いてありますたが、以下のようなヘッダファイルを作りそれを数回インクルードしても何ら異状が無くコンパイルできました。 math.h→ヘッダファイル名 #define max(a,b)  ((a)>(b)?(a):(b))→ヘッダファイルの内容 c ファイル #include<stdio.h> #include"math.h"←複数回インクルード #include"math.h"←複数回インクルード int main(void){ int x=1,y=2; printf("max(x,y)=%d\n",max(x,y)); return 0; } 環境としては、RedHat Linuxでviです。 何ゆえ、エラーにならないのか良く解りません。 宜しくお願いします。

  • Visual StudioのF5一発で、変更があるプロジェクトのみビルドしなおしで、実行までの自動化方法についての質問

    質問内容についてまず、結論を書きます。2つあります。 いづれか一方だけの回答でもわかるのであれば、お願いします。 Q1 同一ソリューションファイルに、複数のexeとdllが存在する時に、 「ソリューションのビルド」(リビルドではないです)を実行または、F5キーを押して、実行の行為を おこなった時に、ソースに変更があったプロジェクトのみビルドしなおされるようにする方法を教えてください。 Q2 また、dllの参照設定に指定するdllは2つあるうちのどちらを設定すればよいかを教えてください。そして、その理由もできれば、お願いします。 ↑「2つあるうちのどちらを」はおそらく意味不明だと思いますので、以下の説明のなかで言及します。 <<以後補足説明>> A.exe、B.dll、C.dll、D.dll、E.exe から構成されるアプリケーションを開発中です。 ソリューションファイルのパスは、 C:\hoge\A\A.sln です Aプロジェクトのプロジェクトファイルは C:\hoge\A\A.vbproj プロジェクトファイルについては、A~Eまで同様で、 Aフォルダと、プロジェクトファイル名が、各自のアルファベットにかわっただけです。 2箇所にdllが出力されます。 ア) C:\hoge\B\bin イ) C:\hoge\B\obj\Debug A~Eもアルファベットが異なる、exeとdllが異なる以外は同様です。 Q2の「2箇所」はこれのことです。 Q1ですが、Bプロジェクトのあるソースを修正してF5で実行しても、 B内での変更内容が実行に反映されなかった。 参照設定が原因か?と、(ア)→(イ)に変更しても、結果は同じ。 ソリューションのリビルドまたは、 Bプロジェクト単独でビルドした後にF5キーを押すと、反映されますが・・ そこで、Q1の質問ですが、F5キー一発で、ソリューションのなかで、変更があったソースのプロジェクトのみビルドして、 実行するまでを一発で、やる設定方法はないでしょうか?

  • ヘッダファイルの有効範囲

    現在OpenGLを使ったプログラムを作っていて, hoge.hというヘッダファイルで #include <GL/glut.h> piyo.hというヘッダファイルには #include "hoge.h" そしてさらにhogehoge.hというヘッダファイルに #include "piyo.h" として, hogehoge.cppのソースファイルにて #include "hogehoge.h"してOpenGLの関数を使おうとしたら エラーが出ました. hogehoge.cppでhogehoge.hをインクルード →hogehoge.hでpiyo.hをインクルード →piyo.hでhoge.hをインクルード →hoge.hでGL/glut.hをインクルード というように,橋渡し的にインクルードはできないのでしょうか? これはこのような仕様なのでしょうか? それとも他に誤りがある可能性があるのでしょうか… 非常に困っております. ご回答お待ちしております.

  • C言語のヘッダーファイルについて

    宜しくお願い致します。 C言語について殆ど知識が無い為、変な質問でしたらすみません。 あるソースをビルドしてみたのですが、エラーが出てしまいます。 fatal error C1083: インクルード ファイルがオープンできません。'ヘッダーファイル名': No such file or directory このエラーが出るのは、以下のファイルです。 <sys/socket.h> <netdb.h> <netinet/in.h> <sys/param.h> <sys/uio.h> <unistd.h> これらのファイルは一体何処にあるのでしょうか。 どうすればこのエラーは消えるのでしょうか・・・

  • 自作したヘッダファイルをインクルードするには

    自作したヘッダファイルをインクルードするには 自作したヘッダファイルを半角スペースを含むフォルダを指定する時、 何かエスケープシーケンス文字が必要でしたでしょうか?ド忘れしてしまいました… 例えば、Program Filesの直下に入れた自作ヘッダファイルa.h(まず考えられないとは思いますが…)を インクルードしたい時、 #include "C:\\Program Files\\a.h" でいいんですよね?

  • #include <Windows.h>というヘッダファイルについて

    お早う御座います。 Cの初心者です、宜しくお願いします。 「#include <Windows.h>」というヘッダファイルはどのようなプログラムを書いたときにincludeしてやる必要があるのでしょうか。 宜しくお願いします。

  • JSPでCのようにヘッダーファイルをインクルード

    JSPでCのようにヘッダーファイルをインクルード お世話になります。 JSPでウェブページを作成しています。 ページ読み込み部分で前のページからPOSTされた情報に対して、 条件式を使い「真」ならそのページを表示、 偽の場合にはresponse.sendRedirect("URL");で別ページへジャンプをさせようと考えています。 その際に条件の判定に定数を使用したいのですが、 その定数は他のページでも使用する場合があるため、 C言語のヘッダーファイルのように、 別ファイルを用意して使い回しをしたいのですが… //test.h----------------------------- #pragma once const int CHECK_NUM = 15; //----------------------------------- //test.c #include <stdio.h> #include "test.h" int main(){ int n = 10; if(n < CHECK_NUM){ //真 } else{ //偽 } return 0; } このようにすればC言語では外部にかかれた定数を使用することができると思うのですが JSP,JAVAともに未経験のため詰まっています。(目下勉強中です) JSPで同様のことをするにはどのようにしたらよいのか教えていただきたいです。 質問をするにあたり情報の不足などがあるかもしれません。 その際にはお手数ですが、解答にてご指摘いただけると助かります。 宜しくお願い致します。

    • ベストアンサー
    • Java