- ベストアンサー
VC++ includeファイルについて
VC++2005でグローバル変数を利用したいと考えています。 そこで、kaisu.hというヘッダーファイルにint n=0;と書いてあります。 そこでプログラムでは、 #include "kaisu.h" しているのですが、エラーがどうしても出てしまいます。 エラーは以下の通りなのですがどのようにすれば良いのでしょうか? error LNK2005: "int n" (?n@@$$Q3HA) は既に Form2.obj で定義されています。 場所::試作品.obj エラー 2 fatal error LNK1169: 1 つ以上の複数回定義されているシンボルが見つかりました。
- みんなの回答 (4)
- 専門家の回答
質問者が選んだベストアンサー
グローバル変数の使い方が根本的に間違っています。 int n ; の宣言は一箇所で行い、includeファイルには extern int n ; を宣言します。
その他の回答 (3)
- Wr5
- ベストアンサー率53% (2173/4061)
フォームアプリや.NET frameworkは触ったこと無いのですが… http://msdn.microsoft.com/ja-jp/library/system.string_members(VS.80).aspx でしょうか? Lines[]とか無いみたいなのですが……。 この辺は詳しい人にお任せします。 >そしてnの初期化を行いたいのですがプログラムに書くとエラーが出てしまいます。 >test.hにexteru int n=0; >form1.hに >extern int n; C、およびC++だと……どこかに「extern」のついていない実体が必要ですが…。 フォームアプリケーションだと不要なんでょうか? ~.hには「extern」つき。 その~.hをインクルードしているどこかののソースファイル(~.cまたは~.cpp)の1つに「extern」がついていない実体を置きます。 #1さんも >int n ; の宣言は一箇所で行い と回答していますが。
お礼
ありがとうございます。 何とかできました。
- Wr5
- ベストアンサー率53% (2173/4061)
>s=textbox1->Lines[n]でnの数の行数を取り出して表示しています。 >2回目で止まってしまうというのは、nの値が1になり行数は2行目を表示するというようしたいのです。 では、textbox1はなにものですか? CStringではないですよね? フォームアプリケーションなのか、MFCを使用しているのか、.NET frameworkなのかも不明なのですが…
補足
フォームアプリケーションです。 System::Stringです。 そしてnの初期化を行いたいのですがプログラムに書くとエラーが出てしまいます。 test.hにexteru int n=0; form1.hに extern int n; n=n+1; ss=textBox3->Lines[n]; textBox5->Text=ss; というプログラムなのですが、エラーは以下になります。 error C4430: 型指定子がありません - int と仮定しました。メモ: C++ は int を既定値としてサポートしていません。
- Wr5
- ベストアンサー率53% (2173/4061)
プロジェクトはどういう構成なんでしょう? CStringクラスで s=textbox1->Lines[n] という使い方はできないみたいですが……。 それはそれとして、 >2回目でどうしても止まってしまいます。 というのはどういう状態ですか? また、その時のnの値はいくつになっていますか?
補足
返信ありがとうございます。 s=textbox1->Lines[n]でnの数の行数を取り出して表示しています。 2回目で止まってしまうというのは、nの値が1になり行数は2行目を表示するというようしたいのです。 本来の行いたいことは、nが1なら2行目を表示してボタンが押されるたびに、更新されていくように作ろうと思っています。
お礼
ありがとうございます。 解決できました。
補足
返信ありがとうございます。 エラーはなくなってのですが、思ったように動いてくれませんでした。 行いたいことは、 n=n+1; s=textbox1->Lines[n] textbox2->text=s そのnの回数を1回ずつ増やしていきたいのですが2回目でどうしても止まってしまいます。 このような場合でも宣言の仕方がよくないのでしょうか?