2013-10-15 58 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

我有我的代码在另一种方式,它现在运行良好 –