2011-06-28 6 views
3

私のコードの問題点は何ですか?これは、コンパイルされません。..char配列のコンパイルエラー

class FileNames 
    { 
     public: 
      static char* dir; 
      static char name[100]; 

      static void Init3D() 
      { 
      FileNames::dir = "C://3D//"; 
      FileNames::name = "abc"; 
      } 
    }; 
+1

何のエラーを得ているために? –

+2

次回は、コンパイルエラーを投稿してください。 –

+0

あなたはエラーを投稿できますか? – MGZero

答えて

5

あなたは配列に割り当てることができませんので、FileNames::name = "abc"が失敗した(char arr[4] = "abc"作品を、しかし、これは直接の初期化ではなく、割り当てであるため)。ここでもchar*を使用するか、strcpyを使用して配列にデータをコピーするか、生の文字列の欠点の多くを避けるより良いstd::stringを使用してください。

最も重要なことは、静的メンバーをグローバルスコープのどこかで、関数外で定義する必要があることです。 char FileNames::name[100];。この時点で、=を使用する初期化構文は配列でも可能ですが、割り当てられる文字列は配列と同じ長さである必要があります。

+0

FileNames :: dirではなく、FileNames :: nameが失敗することを意味する必要があります。 FileNames :: dirは配列ではありません – Nick

+0

ありがとう、それを修正し、明確にしました。 –

1

あなたのコードには二つの問題があります。

1)あなたは、2つの異なるタイプの変数nameを()重複してきましたが。
2)静的メンバーを初期化することはできません(下記の例を参照)。

最後に問題はありませんが、代わりにstd::stringを使用することをお勧めします。これは、文字列機能をカプセル化して生ポインタを処理する必要がないためです。特に、あなたがこの種のことを初めて熟知しているならば、苦痛はそれほどありません。これに

変更を:

// Header file 
class FileNames 
{ 
private: 
    static char* name; 
public: 
    static char* dir; 
}; 

CPP file 
#include "FileNames.h" 

char* FileNames::name = "abc"; 
char* FileNames::dir = "C://3D//"; 

// Now use your class... 
+0

1)うーん...彼はいない? 2)彼は初期化していません、実行時に値を割り当てていますが、これはうまくいくはずです。問題は、別の答えで指摘されているように、代入演算子を使用してC/C++で配列をコピーできないということです。 – Lundin

+0

@ Lundin、1)彼の質問の元のバージョンでは(それは静的なchar *名前だった)、2)の理由につながる。 –

+0

ああ、ステルス編集:) – Lundin

0

は次のように初期化してみてください。

class FileNames 
{ 
    public: 
     static char* dir; 
     static char name[]; 

}; 

char *FileNames::dir = "C://3D//"; 
char FileNames::name[100] = "abc"; 
0

あなたが実際にクラスの外の静的メンバを定義するために覚えていましたか?また、実際にクラス外にいない限り、スコープを解決する必要はありません。

-1

用途:

FileNames::dir = new char[strlen("C://3D//")]; 
strcpy(FileNames::dir, "C://3D//"); 
strcpy(FileNames::name, "abc"); 

また、#include <cstring>に忘れないでください、あなたは後でdelete[](FileNames::dir)

+0

strcpyは、dirが指すランダムなアドレスに本当に悪い考えです。 – Lundin

+0

@ Lundin - 合意しました! Blech ...誰がこれをやるだろう! :p – Andrew