- ベストアンサー
extern "C"が原因?
今、自分のソースから既存の(sample.h)をインクルードし、 そのヘッダファイルの変数を用いようと思っているのですが、 「error LNK2001: 外部シンボル "ID_WMP" は未解決です。」というエラーが出ます。 (sample.h) extern "C" const GID ID_WMP 自分のソース(my.h)で、このID_WMPを使用すると、上記のエラーがでます。 困っています。よろしくお願い致します。
- みんなの回答 (2)
- 専門家の回答
関連するQ&A
- C++ の LNK2001エラー
「sample.obj : error LNK2001: 外部シンボル ""void * __cdecl SetupDiGetClassDevsW(struct _GUID *,wchar_t const *,struct HWND__ *,unsigned long)" (?SetupDiGetClassDevsW@@$$FYAPAXPAU_GUID@@PB_WPAUHWND__@@K@Z)" は未解決です。」というエラーメッセージが出ます。 ソース中に extern "C" { #include "hidsdi.h" #include <setupapi.h> } #pragma comment(lib, "setupapi.lib") #pragma comment(lib, "hid.lib") の記述をしています。 Visual C++ 2005 Express Edition で [プロジェクト] -> [プロパティ] -> [構成プロパティ] -> [リンカ] -> [追加のライブラリ] のところにディレクトリ設定も行っています。 どのようにしたら解決できるのでしょうか。
- ベストアンサー
- C・C++・C#
- error LNK2001について
C++ の勉強中です。 error LNK2001問題がありました。問題点も分からないから、 分かった方に教えていただけないでしょうか? ソースも添付します。環境はVS2005 express edition まず、ヘッダファイルです。ファイル名は、myheader.h #ifndef __MYHEADER_H__ #define __MYHEADER_H__ #define includeshow(x) \ { \ s.show(x); \ } class Sample{ public: void show(char * parameter); }; extern Sample s; #endif //------------------------------------------------ 次に、Sample.cppです。 #include "myheader.h" #include <stdio.h> void Sample::show(char *parameter){ printf("in show func"); } //----------------------------------------------- 最後にTest.cppです。 #include "myheader.h" #include <stdio.h> int main(){ includeshow("ppppp"); } これで error LNK2001: 外部シンボル ""class Sample s" (?s@@3VSample@@A)" は未解決です。というエラーが出ています。 よろしくおねがいします。
- ベストアンサー
- C・C++・C#
- extern指定子と実装(#include)について
2点質問があります。 #1.#includeできるのはヘッダーファイルのみなのでしょうか。 ヘッダファイルをインクルードしなくてはいけないのは、わかっ てます。.c(Cソースコード)はインクルードできないのでしょう か。 #2.#1と絡んだことについてです。 たとえば、2つの関数Func1()とFunc2()とをメインルーチンと は別のソースコードに関数の処理を記述したとします。 ファイル名:Func.c 中身:Func1とFunc2の処理内容 次にこれをメインルーチン内で使用するために以下のように記述 して保存したとします。 ファイル名:Func.h 中身:#include "Func.c" extern void Func1(void); extern void Func2(void); 最終的に、ファイル名:main.c #include "Func.h" --------------- Func1(); Func2(); というようなことは可能でしょうか。
- ベストアンサー
- C・C++・C#
- VC++/MFCで error LNK2001
C++/MFCで以下のようなエラーが出て困っております。 だれか、原因の分かる方はいらっしゃいますでしょうか? 1>Test.obj : error LNK2001: 外部シンボル ""public: __thiscall CSampleApp::CSampleApp(void)" (??0CSampleApp@@QAE@XZ)" は未解決です。 1>C:Test\src\Test\Release\Test.exe : fatal error LNK1120: 外部参照 1 が未解決です。 エラーのあったソースコード --------------------------------------------------------- #include "../Sample/Sample.h" void Test::Onfile() { std::auto_ptr<CSampleApp> p( new CSampleApp() );//←このソースコードを追加するとエラーになります。 } --------------------------------------------------------- Sample.h --------------------------------------------------------- class CSampleApp : public CWinApp { public: CSampleApp(); }; extern CSampleApp atTheApp; ----------------------------------------------------------
- ベストアンサー
- C・C++・C#
- ロベールのC++入門講座
C++独習者(全くのビギナーです)です。 ロベールのC++入門講座(初版第3刷)の中の以下のコードについて質問さて下さい。(著者入院中のため「マイコミ」からの回答は頂けていません) P896 に以下のコードと実行結果が記載されています。 ExternC1.cpp #include <iostream> using namespace std; extern “C” int StrCount(const char* str, char ch); int main(){ cout << StrCount(“HogeHoge”, ‘H’) << endl; } (実行結果) 2 となっていますが、このまま実行すると 1>Sample.obj : error LNK2019: 未解決の外部シンボル _StrCount が関数 _main で参照され ました。 1>C:\Users\YUZO\documents\visualstudio2010\Projects\Sample\Debug\Sample.exe : fatal error LNK1120: 外部参照 1 が未解決です。 とのエラーメッセージで、実行できません。 P897 に、ヘッダーファイルが必要との記述が記載されているのですが、具体的にどのように、ヘッダーファイルを記述すれば良いのか、判読出来ません。 どなたか具体的にご教授頂ければ幸いです。 ◎PC--- Windows7 Home Premium ◎使用ソフト--- Microsoft Visual C++2010 Express 以上宜しくお願い致します。
- ベストアンサー
- C・C++・C#
- C言語で、記憶クラス指定子extern・staticを関数に指定
C言語の本に、「関数の定義と呼び出す側が別ソースファイルの場合、プロトタイプはヘッダーファイルに書き、定義側と呼び出し側の両方でインクルードしましょう」ということが書かれていました。 例えば、 ===code1a.c=== extern void funcB(int); static void funcA() { funcB(1); } ===code1b.c=== void funcB(int a) { printf("%d\n",a); } このような場合には、もしcode1b.cの中の関数funcBに引数を追加した場合、再コンパイルしても気づかないのでよくない。 そこで、次のようにヘッダーファイルを作り、プロトタイプはそこに書くべきだ。 ***code2b.h*** extern void funcB(int); ***code2a.c*** #include "code2b.h" static void funcA() { funcB(1); } ******code2b.c**** #include "code2b.h" void funcB(int a) { printf("%d\n",a); } 記述は以上のようなことです。 #include "code2b.h" とは、 extern void funcB(int); が書いてあるのと同じだと思います。 私が思ったのは、本の勧める方法では、 funcBを定義しているcode2b.cで、プロトタイプの記憶クラス指定子が、externになっているが良いのか(externとは、別のソースファイルで定義されているという意味ではないか)ということです。 extern, staticは、プロトタイプに書くべきなのか、関数の定義に書くべきなのか、も両方に書くべきなのでしょうか。 私の処理系では、 ・プロトタイプ宣言でexternを付けて関数定義でstaticを付ける、 ・staticを付けた関数を他のソースファイルで呼ぶ、 などの明らかに矛盾する場合は、コンパイルエラーになります。 でも、extern単独での役割はなさそうです。 他の処理系でも同じでしょうか。 (main等省略)
- ベストアンサー
- C・C++・C#
- プロトタイプなのにexternを使っても良いのか?
1999年の古いソフトを解析しているのですが、 extern の使い方に疑問が有ります。 ヘッダの中に全ての関数が extern で宣言されています。 その中に自分自身の関数も含まれていますから、プロトタイプ であるべき関数が extern になっています。 しかしエラーにはならない。 これは正当な使い方なのでしょうか。 宜しくお願いします。
- ベストアンサー
- C・C++・C#
- static と externについて
以下のようなプログラムを組んでいます。 //main.h static int hoge; void someOperation(); //hoge.cpp #include "main.h" extern int hoge; void someOperation() { hoge = 15; } //main.cpp #include <stdio.h> #include "main.h" extern int hoge; int main() { someOperation(); printf("%d\n",hoge); return 0; } このプログラムを実行したのですが、自分の予想した15という出力ではなく、不定値になるようなのです。 自分の予想では、someOperationで操作するhogeも、main内で操作するhogeも同じになるようにと思いexternをつけているのですが、なにがまずいのでしょうか? ご存知の方、ご教授お願いします。
- ベストアンサー
- C・C++・C#
- C++でのエラー LNK2001
C++でプログラミング中ビルドしたところ以下のようなエラーが出ました。解決方法がわかりません。どのようにしたら解決できるのでしょうか? ---------------------------------------------------------------- コンパイル中... sample01.cpp リンク中... sample01.obj : error LNK2001: 外部シンボル "__imp__dispose_library" は未解決です sample01.obj : error LNK2001: 外部シンボル "__imp__get_copyright_information" は未解決です sample01.obj : error LNK2001: 外部シンボル "__imp__get_version_information" は未解決です sample01.obj : error LNK2001: 外部シンボル "__imp__initialize_library" は未解決です sample01.obj : error LNK2001: 外部シンボル "__imp__close_reader_writer" は未解決です sample01.obj : error LNK2001: 外部シンボル "__imp__get_last_error_types" は未解決です Debug/Sample01.exe : fatal error LNK1120: 外部参照 6 が未解決です。 link.exe の実行エラー
- ベストアンサー
- C・C++・C#
- CとC++、どちらでコンパイルされているかをソース中で判別する方法
タイトルのとおり、CとC++のどちらでコンパイルされているのかを、ソース中で判別する方法(#ifなど)を教えて下さい。 目的は、extern "C" という記述がCではエラーになってしまうのですが、CでもC++でもインクルード可能なヘッダファイルにするため、ヘッダファイル中で #if「C++でコンパイル中」 extern "C" { #endif としたいのです。 よろしくお願い致します。
- ベストアンサー
- C・C++・C#