VC++ C初心者です
自社開発した画像形式の画像を表示するViewerを作成する事になり
SDKで開発を進めていましたが、MFCの方が開発効率が
良さそうなので、必要な部分(ファイルからPixcel単位のRGB値を読み書きする処理)を部品化してヘッダファイル・CPPファイルにまとめてMFCフォームへ移行を始めました
開発環境は
VC++ .Net2003です
上司からMFCベースの簡易Viewer「SimpleImage」(多分マイクロソフトのHPから拾って来たソースと思います)
を受け取り、元プログラムの主要な部分を関数にまとめて移行を始めたのですが、
ビルドでエラーが2つ発生して、先に進めなくなりました
〓エラー(1)〓
SimpleImage fatal error LNK1120: 外部参照 1 が未解決です。
〓エラー(2)〓
SimpleImage error LNK2019: 未解決の外部シンボル
"class ATL::CStringT<char,class StrTraitMFC_DLL<char,class ATL::ChTraitsCRT<char> > >
__cdecl GetUseFicFileName(class ATL::CStringT<char,class StrTraitMFC_DLL<char,class ATL::ChTraitsCRT<char> > >)
" (?GetUseFicFileName@@YA?AV?$CStringT@DV?$StrTraitMFC_DLL@DV?$ChTraitsCRT@D@ATL@@@@@ATL@@V12@@Z) が関数 "
public: void __thiscall CChildView::OnFileOpenimage(void)" (?OnFileOpenimage@CChildView@@QAEXXZ) で参照されました。
移行先のメインCPP内部で「私が作ったファイル
(以後、"abc.h"・"abc.cpp"と呼びます)includeを追記してビルドする処までは、問題無かった(ビルドが出来た)のですが、
メインのCPPファイル内で"abc.h"に記載された関数を呼び出そうとすると上記2つのエラーが出力され、先に進めない状況です
多分、ライブラリ等の参照先が上手に行なえていないのかと思っているのですが、初心者で原因が
まるで特定できないので質問させて戴きました
皆様!助言お願いしますm(__)m
No.1
- 回答日時:
移行方法が書かれていないんですけど。
もちろんMFCのプロジェクトを作って、そこに自分で定義した関数がかかれたソースを追加していくといったイメージなんですよね?
で、CString、abc.cppで使ってますか?
この回答への補足
すみません補足させて戴きます
他人が作ったMFCプロジェクトに自分が作った
abc.cpp と abc.h を追加しました
CStringは abc.cpp で使ってます
abc.cppとabc.hの両方に
#include <atlstr.h>
を記載してます
(根本的にあっているかどうか判ってないですが
ビルドは出来ました)
No.2ベストアンサー
- 回答日時:
>#include <atlstr.h>
おそらく不要でしょう。
MFCでは、デフォルトでstdafx.hというプリコンパイル済みヘッダを使用しています。
このため、ウィザードで作成分を含む各ソースでは、
#include "stdafx.h"
と、インクルードする必要があります。
個別のcppファイルでライブラリ等のヘッダをインクルードは基本的に行いません。ライブラリのヘッダを追加したい場合はstdafx.hに追記していきます。
この回答への補足
>#include <atlstr.h>
上記のインクルード文をコメントにして
実行したところ、前回のエラーは回避できましたが
CString 宣言子を理解してくれてないのか、以下のエラーが出力されてしまいます
〓エラー〓
error C2059: 構文エラー : ')'
error C2086: 'int CString' : 再定義されました。
error C2086: 'int GetUseFicFileName' : 再定義されました。
error C2086: 'int GetUseFicFileName' : 再定義されました。
"GetUseFicFileName"はabc.cpp abc.h に宣言されている関数です
一応プロジェクトのプロパティを確認してみました
「構成プロパティ」→「C/C++」→「プリコンパイル済みヘッダー」を調べてみると以下の様に成っています
プリコンパイル済みヘッダーの作成/使用
= "プリコンパイル済みヘッダー ファイルを使用する(/Yu)"
ファイルを使用して PCH を作成/使用
="StdAfx.h"
プリコンパイル済みヘッダー ファイル
="$(IntDir)/$(TargetName).pch"
このあたりに、ビルドがCStringを無視する起因があるのですかね?
(移行する時から、このヘンでハマるとは思ってましたが、経験不足で
深みにハマったまま出れません・・・・、なにかピンと来たら助言戴けませんか?)
#include "stdafx.h"をabc.cppの一番先頭でインクルードする事で対処出来ました
#include <atlstr.h>
#include <afxstr.h>
でCStringを2回インクルードしてビルドエラーを起こしていた様です
しばらくこんなケースで悩まされそうです
勉強になりました、taka_tatsuさん有難うございます
No.3
- 回答日時:
>error C2086: 'int GetUseFicFileName' : 再定義されました。
>error C2086: 'int GetUseFicFileName' : 再定義されました。
これって、どこのファイルでエラーが出てますか?abc.hですか?abc.cppですか?MFCのウィザードが作成したファイルですか?それともリンク時ですか?
abc.hまでstdafx.hに追加してませんか?
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- C言語・C++・C# const char** p;のとき、free(p)でC4090エラーとなるのはなぜですか 3 2023/03/31 16:28
- その他(プログラミング・Web制作) IT初心者です 仕事で、vb.netで作成されたdllをvbaで呼び出すプログラムを作成しろと言われ 1 2023/03/27 08:22
- PHP アップロード画像数でCSSを分けることに成功したのですが、画像の横に文字を並べることが出来ません。 3 2023/07/28 17:16
- C言語・C++・C# 未解決の外部シンボル _printfが関数_mainで参照されました 1 2022/09/18 15:28
- Java java 入力 3 4 3 出力 ABC DEFG HIJ このようなプログラムの書き方を教えてくだ 2 2022/07/15 14:18
- C言語・C++・C# スタックフレームの消滅 6 2023/05/20 12:33
- C言語・C++・C# このプログラミング誰か教えてくれませんか 1 2022/06/02 15:27
- PHP 掲示板を作成しておりアップロードファイルとメッセージを並べたいので、アドバイスお願い致します 2 2023/07/17 21:01
- C言語・C++・C# PC画面を録画するプログラムでdllの読み込みエラー 1 2023/04/22 08:31
- PHP PHPの構文で間違えが分からない 5 2022/07/11 16:38
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
外部依存関係について
-
error LNK2001について
-
wsprintfのエラーについて
-
VC++/MFCで error LNK2001
-
C言語のエラー LNK1120: 外部参照
-
DB2付きのC言語がコンパイルで...
-
コンパイルエラー
-
リンクエラー
-
コピーコンストラクタと、代入...
-
外部シンボルの未解決のエラー
-
Visual C++ 2005 Express Editi...
-
VC2005のDLLを6.0で呼び出すには
-
python エラー
-
エクセルのエラーメッセージ「4...
-
<unistd.h>をVisualStudioでつ...
-
アプリケーションのDLLファイル...
-
VBAを何回も作り直して、容量が...
-
math.hに含まれる関数が使えない
-
適切な変換関数が存在しない???
-
<math.h>があるのにsqrtが・...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
外部依存関係について
-
LNK2019: 外部シンボル どのよ...
-
C++でのエラー LNK2001
-
外部シンボルの未解決のエラー
-
error LNK2001について
-
外部シンボル" ~~"は未解決で...
-
コンパイルエラー
-
OpenCVでの画像サイズ取得につ...
-
LNK2019: 未解決の外部シンボル...
-
エラー 未解決の外部シンボル
-
LNK2001(Pro*c)
-
実行ファイルの容量を減らした...
-
popen・pcloseについて
-
PathIsDirectoryを使って
-
DB2付きのC言語がコンパイルで...
-
C++ の LNK2001エラー
-
CLapack C++
-
外部シンボルについて
-
未解決の外部シンボル
-
VC++ 6.0へのサンプルプログラ...
おすすめ情報