我有 2 个派生类,我希望它们有自己的构造函数,而不是基类"。下面是标头和.cpp,其中剥离了其他成员函数。
页眉:
#pragma once
#include <SFML/Graphics.hpp>
class TextWrap : public sf::Text
{
public:
TextWrap() {}
};
class CircleWrap : public sf::CircleShape
{
public:
CircleWrap() {}
};
以下是.cpp:
#pragma once
#include "wrappers.h"
#include "stdafx.h"
#include <SFML/Graphics.hpp>
TextWrap::TextWrap(sf::Font font)
{
setFont(font);
setCharacterSize(30);
setStyle(sf::Text::Bold);
setColor(sf::Color::White);
}
CircleWrap::CircleWrap(void)
{
setFillColor(sf::Color::Blue);
setRadius(25);
setPointCount(100);
}
构建此内容时,我在Visual C++ 2010中收到以下错误:
1>c:usersjoedocumentsvisual studio 2010projectsmouseavoidermouseavoiderwrappers.cpp(14): error C2511: 'TextWrap::TextWrap(sf::Font)' : overloaded member function not found in 'TextWrap'
1> c:usersjoedocumentsvisual studio 2010projectsmouseavoidermouseavoiderwrappers.h(5) : see declaration of 'TextWrap'
1>c:usersjoedocumentsvisual studio 2010projectsmouseavoidermouseavoiderwrappers.cpp(38): error C2084: function 'CircleWrap::CircleWrap(void)' already has a body
1> c:usersjoedocumentsvisual studio 2010projectsmouseavoidermouseavoiderwrappers.h(16) : see previous definition of '{ctor}'
我有一种感觉,我的语法在制作构造函数时是错误的......但我不知道为什么。我在网上浏览了教程和示例,我不知道为什么这不起作用。
编辑:它已被修复!我混淆了声明和定义,需要修复变量本身的声明。
第一个构造函数中的错误是你声明了一个默认构造函数,而不是一个以sf::Font
作为参数的构造函数。
在第二个构造函数中,您放置{}
,这意味着您正在定义没有内容的构造函数。如果以后要定义构造函数的主体,则必须在末尾放置一个;
。
它应该是:
class TextWrap : public sf::Text
{
public:
TextWrap(sf::Font font);
};
class CircleWrap : public sf::CircleShape
{
public:
CircleWrap();
};
您已重载默认构造函数,但似乎正在访问非默认版本。
头文件应包含声明而不是定义。 TextWrap() {}
定义一个不带参数且具有空主体的构造函数 - 大括号是空主体。 类声明应如下所示:
class TextWrap : public sf::Text {
public:
TextWrap(sf:Font font);
}
声明/原型中的参数必须与定义中的参数匹配(例如,源文件),并且声明不应包含空正文。