2016-05-02 4 views
1

Hier sind alle .cpp und .h Dateien im Ergebnis meiner Fehler verwendet. Sie sind Fehler, die ich gesehen und behoben habe, aber ich verstehe nicht, warum ich diese Fehler erhalte, es würde nicht die richtige Syntax für den Code ergeben.Einfache Kompilierung Fehler, aber macht keinen Sinn

shape.h

#ifndef SHAPE_H 
#define SHAPE_H 
#include <iostream> 
#include <math.h> 
#include <cmath> 
#include <cstring> 
#include <string> 
#include <algorithm> 
#include <iomanip> 
#include <stdlib.h> 

using std::cout; using std::cerr; using std::endl; 
using std::string; 
    class Shape{ 
     public: 
    Shape(const string&) { } //default constructor 
    virtual void print() const; 
    virtual double get_area() const; 
    virtual ~Shape(); 
     private: 
    string color; 
    }; 
#endif 

shape.cpp

#include "shape.h" 
using std::cout; using std::cerr; using std::endl; 
using std::string; 
void Shape::print() const{ 
cout << color << endl; } 
Shape::Shape(const string& color1):color(color1) 
{/*color = color1;*/ } 
Shape::~Shape() 
{ } 

circle.h

#ifndef CIRCLE_H 
#define CIRCLE_H 
#include <iostream> 
#include <math.h> 
#include <cmath> 
#include <cstring> 
#include <string> 
#include <algorithm> 
#include <iomanip> 
#include <stdlib.h> 
#include <vector> 
#include "shape.h" 
using namespace std; 
using std::cout; using std::cerr; using std::endl; 
using std::string; using std::vector; 
class Circle : public Shape{ 
    public: 
    Circle(const string& , int); 
virtual void print() const; 
virtual double get_area() const; 
    private: 
int radius; 
}; 
#endif 

circle.cpp

#include "circle.h" 
using std::cout; using std::cerr; using std::endl; 
using std::string; 
Circle::Circle(const string& color1,int newRadius):Shape(color1),radius(newRadius) {} 

double Circle::get_area() const{ 
double area; 
area = M_PI * (pow(radius,2)); 
return area; 
} 

void Circle::print() const{ 
cout << "Circle: " << 
    << color << " circle, " 
    << "radius " << radius << ", " 
    << "area " << get_area() << endl; 
} 

Haupt

#include <iostream> 
#include "shape.h" 
#include "circle.h" 
#include <vector> 
using std::vector; using std::string; 
using namespace std; 
int main{ 

    vector<Shape *> shape1(1); 
    shape1[0] = new Circle("Green",20); 

/* 
for(int i = 0; i < arr; i++) 
i.print(); 

for(int i = 0; i < arr; i++) 
delete [] arr; 
*/ 
return 0; 

Fehler:

assign9.cpp:9:17: error: expected primary-expression before ‘shape1’ 
vector<Shape *> shape1(1); 
       ^
assign9.cpp:9:17: error: expected ‘}’ before ‘shape1’ 
assign9.cpp:9:17: error: expected ‘,’ or ‘;’ before ‘shape1’ 
assign9.cpp:10:1: error: ‘shape1’ does not name a type 
shape1[0] = new Circle("Green",20); 
^ 
assign9.cpp:19:2: error: expected unqualified-id before ‘return’ 
    return 0; 
^
assign9.cpp:20:1: error: expected declaration before ‘}’ token 
} 

^ 

Ich bin nicht verstehen, wie diese Fehler zu kommen, auch meine TA konnte es nicht herausgefunden. Ich freue mich über jede Rückmeldung. Danke

+0

Sieht so aus, als ob einige Header fehlen. –

+0

Haben Sie 'using std;' Richtlinie? Sie müssen, wenn Sie Zeichenfolge und Vektor ohne Std :: angegeben verwenden. – CodeFuller

+3

Typo. Sie haben 'Klasse Cirlce' anstelle von' Klassenkreis'. "l" und "c" werden versehentlich getauscht. –

Antwort

4

Cirlce anstelle von Circle.

Zeichenfolge anstelle von Std :: String.

Auf einer Seite beachten, sollte der Konstruktor für Kreis besser Kreis :: Kreis (const string & color1, int newRadius): Form (color1), Radius (newRadius) {}

(initialisieren alles, was Sie kann in Konstruktoren statt in Klammern).

+1

Hinweis zur Terminologie: Wo Sie "in Konstruktoren" sagen, wäre eine bessere Formulierung "in der Member-Initialisierungsliste". – user4581301

+0

Danke für die Randnotiz, ich reparierte die Cirlce anstelle von Circle, aber der genau gleiche Fehler tritt auf. – Xenu

+0

Ich habe es versucht. Ihr Code hat viele Fehler, aber dieser Fehler tritt nicht auf. Vielleicht hast du vergessen, die Datei zu speichern. Wenn es immer noch auftritt, erstellen Sie das minimale Beispiel (versuchen Sie, eine Datei dort zu erstellen, wo sie auftritt, indem Sie alle Ihre Dateien zusammenführen; dann machen Sie die Datei so klein wie möglich und entfernen Sie alles, was für die Fehlerreproduktion nicht notwendig ist). – user31264