2012-11-10 36 views
0

当试图编译我的代码时,我每次都收到以下错误。 这些都是错误的:预计`{'在尝试时声明构造函数时输入结束

C:\...\main.cpp In file included from main.cpp 
C:\...\triangle.h In constructor `trianglePlus::trianglePlus(double, double, double, char*)': 
C:\...\triangle.h expected `{' at end of input 
C:\...\Makefile.win [Build Error] [main.o] Error 1 

这是我的程序的精简版。

triangle.h:

class triangle { 
    double x; 
    double y; 
    double z; 

    public: 
     triangle(double a,double b,double c); 
    }; 
class trianglePlus: public triangle { 
    char * name; 
    public: 
     trianglePlus(double a,double b,double c,char * v):triangle(a,b,c); 
    }; 

在拆除注释部分,它给了我更多的错误。 main.cpp

#include <cstdlib> 
#include <iostream> 
#include <math.h> 
#include "triangle.h" 
using namespace std; 

triangle::triangle(double a, double b, double c) { 
    x = a; 
    y = b; 
    z = c; 
} 

/* 
trianglePlus::trianglePlus(double a,double b,double c,char * v):trijsturis(a,b,c) { 
    x = a; 
    y = b; 
    z = c; 
    name = new char[20]; 
    strcpy(name,v); 
    } 
*/ 

int main() 
{ 
    system("PAUSE"); 
    return 0; 
} 

任何想法可能是错的什么?

+2

你可以在声明中初始化基类。 – chris

+0

什么是trijsturis? –

+0

你确定那个非const char *'吗?这看起来非常模糊。 –

回答

7

您的构造函数需要完全定义或只声明。既然你想指定初始化列表,你需要定义完整的构造函数。最好这样,内联类定义:

trianglePlus(double a, double b, double c, char * v) 
: triangle(a,b,c) 
, x(a) 
, y(b) 
, z(c) 
{ 
} 

或者,只是把声明的标题,在源文件中定义:

trianglePlus(double a, double b, double c, char * v); 

trianglePlus::trianglePlus(double a, double b, double c, char * v) 
: triangle(a,b,c) 
, x(a) 
, y(b) 
, z(c) 
{ 
}