1

私は自分のクラス用に Shape クラス ファイルの作成に取り組んできましたが、約 15 行のコードを追加するまでは、すべて順調に進んでいました。「Rectangle」オブジェクトを作成すると、標準の「予期される型指定子」の 1 つが取得されます。他の 2 つのクラス (Triangle と Circle) のオブジェクトの作成は完全に機能します。2 番目のベクター (shapesTest2) を追加するとすぐにバグが発生したことに気付いたので、それと関係があるのでしょうか?

具体的には、問題の行は次のとおりです。

shapes.push_back(new Rectangle(1, 2, 3, 4, Blue));
shapesTest2.push_back(new Rectangle(11, 22, 33, 44, Black));

エラーリストには次のように書かれています:

    IntelliSense: expected a type specifier     29
    IntelliSense: expected a type specifier     30
Error 1 error C2661: 'std::vector<_Ty>::push_back' : no overloaded function takes 5 arguments   31
Error 2 error C2143: syntax error : missing ';' before ')' 31
Error 3 error C2061: syntax error : identifier 'Rectangle' 31   

とにかく、main.cpp ファイルのコードは次のとおりです。

// main.cpp - Shape class test program
// Written by _______
#include <vector>
#include <Windows.h>
#include "Circle.h"
#include "Triangle.h"
#include "Rectangle.h"


using namespace std;

void main()
{
    // Container of Shapes
    vector<Shape*> shapes;
    vector<Shape*> shapesTest2; // Used for second test case of Move and Scale.

    // Must allocate my object on heap now

    Circle *myCircle = new Circle(10, 10, 100, Red);
    shapes.push_back(myCircle);

    // Create new, unnamed stack-allocated instance of a Circles and push_back() to vector
    shapesTest2.push_back(new Circle(20, 20, 20, Red));

    // Populate the Container with 2 Rectangles

    shapes.push_back(new Rectangle(1, 2, 3, 4, Blue));
    shapesTest2.push_back(new Rectangle(11, 22, 33, 44, Black));

    // Populate the Container with 2 Triangles

    shapes.push_back(new Triangle(3, 4, 5, 7, 15, 4, Black));
    shapesTest2.push_back(new Triangle(6, 7, 9, 8, 43, 15, Green));

// There's more to the file, but this is the only time this pops up, and the rest is
// just messing around with the vector<Shape*>. I figured I'd try and save time and
// space by only posting what's needed, but if you think that the error is caused by
// code below, ask me and I'll upload the rest of this main.cpp file

}

参考までに、これが私の Rectangle.h ファイルです。

#pragma once

#include <string>
#include "Shape.h"

using namespace std;

// Enum Colors = {Red, Blue, Green, Black, White}; is located in "Shapes.h"

class Rectangle : public Shape
{
public:
Rectangle(int x, int y, int width, int height, Colors color) : Shape(x, y, color)
{
    Width = width;
    Height = height;
}

virtual void Scale(float scaleFactor)
{
    Width = int(Width*scaleFactor);
    Height = int(Height*scaleFactor);
}

virtual void Draw() const // const b/c it doesn't alter Radius, X, Y, nor Color
{
    cout << "Rectangle of width " << Width << " and height " << Height << " with the top left corner at (" << X << ", " << Y << ") and color " << GetColor() << ".\n" << endl;
}

private:
int Width;
int Height;
};

助けてくれてありがとう、他のすべての質問を読んでみましたが、「#include " _ "」の部分を忘れてしまったようです。

4

1 に答える 1

7

エラーの原因は、windows.h. 線を取り除く

#include <Windows.h>

そしてすべてがコンパイルされます。

編集: このような競合を避けるために、クラスを名前空間に配置できます。ヘッダーに次のように記述します。

名前空間 Foo { class Rectangle { ... }; }

于 2013-02-20T22:54:41.953 に答える