-1

こんにちは、私は C++ が初めてで、dev-c++ で C++ コードの構造をテストしています。しかし、コンパイルしてエラーを出すことはありません。dev-c++ のプリプロセッサ ディレクティブで .h 拡張子を使用するとうまく機能します。だから私はそうは思わない.h拡張子の問題を抱えている

#include<iostream.h>
#include<conio.h>
#include<iomanip.h>
struct car
{
  const int MAX=10;
  char model[MAX];
  char spare_part[MAX];
  float cost;        

          }
int main()
{

    car BMW ;
    BMW.model[MAX]="SLR-8 S";
    BMW.spare_part[MAX]="SILENCER";
    BMW.cost=175.56F;


    cout << setw(50) << "\n\n WELCOME TO SHOWROOM" << endl << endl;
    cout <<  "CAR MODEL: " << BMW.model[MAX] << endl;
    cout << "SPARE PART: " << BMW.spare_part[MAX] << endl;
    cout << "COST OF PRODUCT: " << BMW.cost[MAX] << endl;  
    return 0;
    }

コンパイラ ログは次のとおりです。

Compiler: Default compiler
Executing  g++.exe...
g++.exe "D:\cdev\projects\structure.cpp" -o "D:\cdev\projects\structure.exe"    -I"D:\cdev\Dev-Cpp\lib\gcc\mingw32\3.4.2\include"  -I"D:\cdev\Dev-Cpp\include\c++\3.4.2\backward"  -I"D:\cdev\Dev-Cpp\include\c++\3.4.2\mingw32"  -I"D:\cdev\Dev-Cpp\include\c++\3.4.2"  -I"D:\cdev\Dev-Cpp\include"   -L"D:\cdev\Dev-Cpp\lib" 
In file included from D:/cdev/Dev-Cpp/include/c++/3.4.2/backward/iostream.h:31,
             from D:\cdev\projects\structure.cpp:1:

D:/cdev/Dev-Cpp/include/c++/3.4.2/backward/backward_warning.h:32:2: warning: #warning This file includes at least one deprecated or antiquated header. Please consider using one of the 32 headers found in section 17.4.1.2 of the C++ standard. Examples include substituting the <X> header for the <X.h> header for C++ includes, or <iostream> instead of the deprecated header <iostream.h>. To disable this warning use -Wno-deprecated.

D:\cdev\projects\structure.cpp:6: error: ISO C++ forbids initialization of member `MAX'

D:\cdev\projects\structure.cpp:6: error: making `MAX' static

D:\cdev\projects\structure.cpp:13: error: new types may not be defined in a return type

D:\cdev\projects\structure.cpp:13: error: extraneous `int' ignored

D:\cdev\projects\structure.cpp:13: error: `main' must return `int'

D:\cdev\projects\structure.cpp: In function `int main(...)':

D:\cdev\projects\structure.cpp:16: error: `MAX' undeclared (first use this function)

D:\cdev\projects\structure.cpp:16: error: (Each undeclared identifier is reported only 
once for each function it appears in.)

Execution terminated
4

2 に答える 2

2

stuct の値は、コンストラクターで初期化するか、静的にする必要があります。お気に入り:

struct car
{
  static const int MAX=10;
  ...

構造体定義の後にセミコロンがありません。次のようになります。

struct car
{
  static const int MAX=10;
  char model[MAX];
  char spare_part[MAX];
  float cost;        

};
于 2013-10-15T06:37:46.447 に答える
1

セミコロンを確認してください。構造体を閉じる } の後に 1 つ必要です。

また、MAX 変数を宣言しますstatic

{
    static const int MAX=10;

しかし、コンパイラはそれを非常にうまく伝えます...

そして 3 番目のエラーは、MAX内部carで宣言しているという事実から発生し、それに応じて として参照する必要がありますcar::MAX。しかし、実際には、ステートメント全体BMW.model[MAX]="SLR-8 S";はあまり意味がありません。これは、「文字列 "SLR-8 S" を BMW.model の最後の文字の後の文字に割り当てる」ことを意味します (char[MAX] の場合、有効なインデックスは 0 から始まり、(MAX-1) まで!) . std::stringの代わりに使用するとchar model[MAX]、はるかに扱いやすくなります。例えば:

struct car
{
    std::string model;

それからあなたは簡単に言うことができます

BMW.model="SLR-8 S";
于 2013-10-15T06:37:46.083 に答える