CTypedPtrArrayについて

[戻る]
cc 2010/05/12(水) 12:33:02
お世話になっています。ccです。

はじめて、CTypedPtrArray()使っています。
宣言のところにエラーが出ました。
例
MyApp1.h
 CTypedPtrArray<CPtrArray, WCHAR*>    m_Wchar;

ちなみに、
stdafx.h
#include <afxtempl.h> //追加

エラー:
e:\MyApp1.h(13): error C2143: 構文エラー : ';' が '<' の前にありません。
e:\MyApp1.h(13): error C2501: 'CMyApp1::CTypedPtrArray' : 識別名を宣言するのに、
型が指定されていません。
e:\MyApp1.h(13): error C2238: ';' の前に無効なトークンがあります。

何が間違っているのでしょうか。
よろしくお願いします。

ryo 2010/05/12(水) 12:35:43
とりあえず、開発環境を

cc 2010/05/12(水) 12:57:15
すみません、
環境:XP 。Net2002 MFC

よろしくお願いします。

仲澤@失業者 2010/05/12(水) 14:34:21
VS2003(しか無いので)でやってみましたが、特に問題なく通ります。
無効と判定されているのは「CTypedPtrArray」のようなので、

1.当該の afxtempl.h を開いて確認
2.インクルードパスの確認
3.タイプミスの確認

など、してみてはどうでしょう。

えちぜん 2010/05/12(水) 14:37:19
MyApp1.h
の先頭付近に#include <afxtempl.h>を追加してみてはどうでしょう。

cc 2010/05/12(水) 14:54:11
えちぜんさん
ご回答ありがとう。

>MyApp1.h
>の先頭付近に#include <afxtempl.h>を追加してみてはどうでしょう。
うまくできました。

確かに、
MyApp1.cppに
#include "stdafx.h"がありますが、
#include <afxtempl.h>を読んでないでしょうか。
どう理解すればいいでしょうか。

よろしくお願いします。

Blue 2010/05/12(水) 15:23:47
MyApp1.h

を#includeしているものの上にかならず#include "stdafx.h" がありますか?

たとえば
MyApp.cpp

#include "stdafx.h"
#include "MyApp1.h"

という順番になっているのか。


どうしても出来ないようであれば、単にMyApp1.hで#include <afxtmpl.h> を記述するれ
ばいいです。

えちぜん 2010/05/12(水) 15:30:47
MyApp1.cppはstdafx.hを読み込んでいますが、MyApp1.hは読み込んでないん
じゃないかなぁぐらいの考えです。

MyApp1.cppの中で、stdafx.hとMyApp1.hの両方を指定しているが、コンパイルできない
のはなぜだろうということですよね。
.hと.cppのコンパイル時の取り扱いや、宣言や定義の関係が絡んでいると思うのです
が、詳しくないので説明できません。

有識者の方、教えてください。

cc 2010/05/12(水) 16:49:43
[[解決]]
みなさん、ご回答ありがとう。

>1.当該の afxtempl.h を開いて確認
開けます。
>2.インクルードパスの確認
\c:Program Files\Micorsoft Visual Studio.Net\Vc7\atlmfc\inclde
>3.タイプミスの確認
なし

>MyApp.cpp
>#include "stdafx.h"
>#include "MyApp1.h"
>という順番になっているのか。
その順番になっています。#include "stdafx.h"一番上です。

自作プロジェクトはその現象になっています。
ダウンロードしたサンプルは
stdafx.h
#include <afxtempl.h>
になっています。
試しに
TypedPtrArray<CPtrArray, WCHAR*>    m_Wchar;
別のクラスに置いても正常になっています。

>どうしても出来ないようであれば、単にMyApp1.hで#include <afxtmpl.h> を記述するれ
>ばいいです
そういう方法しかないです。

どうもありがとうございました。

古いスレッドには追加発言できません。