0

ヘッダー「dmanager1.h」で(他のクラスとともに)定義されている File というクラスがあります。「dmanager1.cpp」ファイル (dmanager1.h ファイルの実装) で、ヘッダーを 1 つの順序でリストすると、main.cpp と一緒にコンパイルしようとするとエラーが発生します (main.cpp はヘッダー以外は空です)呼び出しと空の「int main()」...基本的には、クラス .h および .cpp ファイルをテストしているだけです)... dmanager1.cpp ファイルでヘッダーを切り替えても、エラーは発生しません。何が起こっているのかわかりません。私が得ているエラーは次のとおりです: エラー: 'ファイル' は型に名前を付けていません

「dmanager1.cpp」でヘッダーを次のように並べると、エラーが発生します。

#include "dmanager1.h"
#include <iostream>
#include <cstring>

ヘッダーを次のように切り替えると:

 #include <iostream>
 #include <cstring>
 #include "dmanager1.h"

...コンパイルエラーが発生しません。最初の注文が解析されるのはおかしいですか? どんな考えでも大歓迎です。

編集:問題のヘッダーの一部を追加しました...

#ifndef _dmanager1_h
#define _dmanager1_h


//--------------------
// Forward References
//--------------------
// Node_L, Node_T, and Sector are defined in File: dmanager1a.h
class Node_L;
class Node_T;
class Sector;



class File
{
        public:
                // Default Constructor
                //File();
                // Constructor: Allowing "name", "size", and/or "permissions" to be set
                // Permissions set to default of 0 == read and write
                File(const char * & name, float size = 0, int permissions = 0) : timestamp(11223333) {};
                // Default Destructor
                ~File();

                //returns an int corresponding to the date modified (mmddyy)
                int get_date_mod(void) const {return timestamp;}

                // Return's current level of permission on the File: 0 = read/write, 1 = read only
                int get_permission(void) const {return permission;}

                // Set's Permission to "level": 0 = read/write, 1 = read only
                int set_permission(int level);

        private:
                // Data members
                char * name;
                float size_OA;

                //function used to update "date modified"
                void update_timestamp(void);

                // Current permission level of the file: 0 = read/write, 1 = read only
                int permission;

                //value modified by update_timestamp() and the value returned by get_date_mod().  Date file last edited.
                int timestamp;

};
4

2 に答える 2

3

ほとんどの場合、dmanager1.hヘッダーにはそれiostreamまたはcstring定義するものが必要です。

Fileその結果、正しく解析されず、コンパイラはクラスの宣言を理解できません。

ファイルを投稿するdmanager1.hと、より詳細な回答を得ることができます。

于 2012-07-11T00:58:50.783 に答える
2

各ヘッダーが完全に自給自足であることを確認してください。使用するすべてのヘッダーが必要で#includeあり、それらが他の何かに含まれるとは想定していません。.c ファイルに含まれる唯一のヘッダーであっても、すべてのヘッダーが機能するはずです。

あなたの dmanager1.h ヘッダーは標準ライブラリの何かを使用しており、必要なヘッダーを含めていないに違いありません。ヘッダーを交換すると問題が解決するように見えますが、偶然にしか機能していません。

実行できる診断テストの 1 つは、行だけを含む .c ファイルを作成することです#include "dmanager1.h"。コンパイルしてみてください。コンパイラがエラーをスローした場合、どの追加ヘッダーを含める必要があるかについてのヒントを提供する必要があります。

更新:使用して投稿したヘッダーの最初の部分を使用してコンパイルできますがg++ -Wall、エラーや警告はまったく表示されません。問題を再現するサンプルを投稿してください。

于 2012-07-11T01:08:44.227 に答える