0

別のダイアログボックス[ベースライン]から起動するダイアログボックス[インポート]を取得しようとしています。必要な「.h」ファイルを含めていますが、インポートクラスのインスタンスを作成できません。私が得るエラーはこれです:

Error   1   error C2146: syntax error : missing ';' before identifier 'iDlg'    h:\shaunak\projects\sar_ccd\sar_ccd\baseline.h  202 1   Sar_CCD

この[baseline.h]を引き起こすコード行:

#include "Markup.h" 
#include<stdio.h>
#include<math.h>
#include "baseline_func.h"
#include "resource.h"
#include "Functions.h"
#include <stdlib.h>
#include "Sar_CCDDoc.h"
#include "Sar_CCDView.h"
#include <vector>
#include "MemAlloc.h"
#include "ReadFiles.h"
#include<vector>
#include<map>
#include "afxwin.h"
#include "import.h"
#include "Geocode.h"




**<SNIP: Taking out the irrelevant lines>**

     afx_msg void OnDestroy();
     virtual void PostNcDestroy();
     afx_msg void OnBnClickedNxtBase();
     CButton nextBaseline;


    import iDlg;               //doesnt work!
    CGeocoding cx;             //works!!!
};

ただし、同じsysntaxを使用して別のクラス[Geocoding]のインスタンスを作成すると、正常に機能します。

#include "Geocoding.h"
CGeocoding cx;

理由を理解するのを手伝ってください。

完全なコード:

baseline.h:http ://freetexthost.com/on06wref6c import.h: http: //freetexthost.com/x4e4dkwrve

4

2 に答える 2

1

Visual Studioには、COM DLLのインポートに使用されるキーワードimportまたは#importがあり、他の目的にも使用されます。あなたはそこで名前の衝突を経験していると思います。

それを回避するために、クラスのインポートをnamespace

import.h

namespace myimport
{
  class import : public CDialog { 
  ...
  };
};

import.cpp

namespace myimport
{
  ...
};

それからあなたがそれを使うとき

myimport::import iDlg;

これで問題は解決するはずですが、名前を「インポート」以外に変更するのがより良い方法です。

于 2012-07-16T10:57:22.570 に答える
0

importC++のキーワードまたはタイプではありません。したがって、コンパイラがを認識しないため、構文エラーが発生しますimport

別のクラスのインスタンスを作成するには、それを適切に宣言する必要があります。例:

class baseline : public CDialog
{
    // ...

    CDialog *iDlg;  // Pointer to imported dialog
};

実際のダイアログへのポインタを初期化することを忘れないでください。

于 2012-07-16T10:20:51.473 に答える