gpt4 book ai didi

C++派生类构造函数调用基类构造函数错误

转载 作者:行者123 更新时间:2023-12-02 10:10:20 25 4
gpt4 key购买 nike

我有一个基类 Sprite :
Sprite .hh

#include <iostream>
#include "vector.hh"

#ifndef SPRITE
#define SPRITE

class sprite
{
private:
vector pos;
//the width and height of the sprite
vector dimensions;
int imArrIndex;

public:
sprite();
sprite(vector p, vector d, int i);
void setPos(vector v);
vector getPos();
void setDimensions(vector v);
vector getDimensions();
void setImArrIndex(int i);
int getImArrIndex();
void movePos(vector v);
};
#endif
Sprite .cc:
#include <iostream>
#include "sprite.hh"
#include "vector.hh"

using namespace std;

sprite::sprite()
{
cout << "sprite created\n";
}

sprite::sprite(vector p, vector d, int i)
{
pos = p;
dimensions = d;
imArrIndex = i;
}

void sprite::setPos(vector v)
{
pos = v;
}

vector sprite::getPos()
{
return pos;
}

void sprite::setDimensions(vector v)
{
dimensions = v;
}

vector sprite::getDimensions()
{
return dimensions;
}

void sprite::setImArrIndex(int i)
{
imArrIndex = i;
}

int sprite::getImArrIndex()
{
return imArrIndex;
}

void sprite::movePos(vector v)
{
pos.setX(pos.getX() + v.getX());
pos.setY(pos.getY() + v.getY());
}
和派生类参与者:
Actor .hh:
#include <iostream>
#include "sprite.hh"
#include "vector.hh"

#ifndef ACTOR
#define ACTOR

class actor : public sprite
{
private:

public:
actor(vector p, vector d, int i) : sprite(p, d, i);
};
#endif
Actor .cc:
#include <iostream>
#include "sprite.hh"
#include "actor.hh"
#include "vector.hh"

using namespace std;

actor::actor(vector p, vector d, int i) : sprite(p, d, i)
{
cout << "actor created\n";
}
两个类都使用 vector 类:
vector .hh:
#include <iostream>
#include <cmath>
#ifndef VECTOR
#define VECTOR

class vector
{
private:
int x;
int y;
public:
vector();
vector(int px, int py);
void setX(int px);
int getX();
void setY(int py);
int getY();
//get the pixel distance between this vector and a given vector
int getDistance(vector v);
};
#endif
vector .cc:
#include <iostream>
#include "vector.hh"

using namespace std;

vector::vector()
{
cout << "vector created\n";
}

vector::vector(int px, int py)
{
x = px;
y = py;
cout << "vector created\n";
}
void vector::setX(int px)
{
x = px;
}
int vector::getX()
{
return x;
}
void vector::setY(int py)
{
y = py;
}
int vector::getY()
{
return y;
}
//get the pixel distance between this vector and a given vector
int vector::getDistance(vector v)
{
return sqrt( pow(x - v.getX(), 2) + pow(y - v.getY(), 2) );
}
现在我只是想在这部分的主要代码中获取 Actor 的构造函数:
vector p(0,0);
vector d(0,0);

actor a(p, d, 1);
但是在运行我的 makefile 时出现此错误:
g++ -c level.cc
In file included from level.cc:6:
actor.hh: In constructor ‘actor::actor(vector, vector, int)’:
actor.hh:15:53: error: expected ‘{’ at end of input
actor(vector p, vector d, int i) : sprite( p, d, i);
^
make: *** [makefile:11: level.o] Error 1
如果我不在派生类中调用基构造函数,我的 makefile 工作得很好,所以我确定它在我的 makefile 中不是错误,但这是我的 makefile,以防万一:
FrogGame: frogmain.o game.o level.o sprite.o actor.o vector.o
g++ -std=c++0x -Wall -pedantic -o FrogGame frogmain.o game.o level.o sprite.o actor.o vector.o `sdl2-config --cflags --libs` -lSDL2_image

frogmain.o: frogmain.cc game.hh level.hh sprite.hh vector.hh
g++ -c frogmain.cc

game.o: game.cc level.hh sprite.hh actor.hh vector.hh
g++ -c game.cc

level.o: level.cc sprite.hh actor.hh vector.hh
g++ -c level.cc

actor.o: actor.cc vector.hh
g++ -c actor.cc

sprite.o: sprite.cc vector.hh
g++ -c sprite.cc

vector.o: vector.cc
g++ -c vector.cc
我假设我在构造函数中有一些语法错误,但似乎无法修复它,有什么建议吗?

最佳答案

在您的头文件中,您有以下行:

public:
actor(vector p, vector d, int i) : sprite(p, d, i); // Error!
我看到你在这里尝试做什么,但这不是合法的 C++ 语法。如果您打算申报 actor构造函数,然后在 .cpp 中定义它文件,这就是你在这里所做的,只需写
actor(vector p, vector d, int i);
然后,在 .cpp 文件中,正如你所做的那样,写
actor::actor(vector p, vector d, int i) : sprite(p, d, i) 
{
cout << "actor created\n";
}
正如你现在所写的那样,C++ 编译器会看到 actor 的声明。构造函数。然后当它看到初始化列表( : sprite(p, d, i) 部分)时,它会认为“哦,好吧,你在这里定义了函数。”然后对为什么有分号而不是函数的实际主体感到非常困惑,这就是你得到的编译器错误所说的。

关于C++派生类构造函数调用基类构造函数错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/63877023/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com