2013-10-15 62 views
-1

嗨,我是新來的C + +和測試結構在c + +代碼在dev-c + +。但它不會編譯和給出錯誤。 它在dev-C++中的預處理器指令中使用.h擴展名可以很好地工作。所以我不這麼認爲它帶有.h擴展名的問題C++結構測試

#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 
+1

請在您的文章中包含錯誤消息。 –

+0

什麼錯誤說?順便說一句,你通常寫在H文件中的定義和在c/cpp文件中的實際代碼 –

+0

'BMW.model [MAX] =「SLR-8 S」;'是錯誤的,並且MAX也不能索引 –

回答

1

檢查你的分號。在結構體的結束之後需要一個。

此外,聲明MAX變量static,即

{ 
    static const int MAX=10; 

但編譯器告訴你,一個相當不錯...

而第三個錯誤來自於你聲明MAXcar事實,您必須按照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"; 
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;   

}; 
+0

我會毫不猶豫地想要增加你,但我沒有授權。但它是更好的方式來解釋然後其餘的上述意見感謝兄弟 –

+0

我有我的代碼在另一種方式,它現在運行良好 –