我有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:\users\joe\documents\visual studio 2010\projects\mouseavoider\mouseavoider\wrappers.cpp(14): error C2511: 'TextWrap::TextWrap(sf::Font)' : overloaded member function not found in 'TextWrap'
1> c:\users\joe\documents\visual studio 2010\projects\mouseavoider\mouseavoider\wrappers.h(5) : see declaration of 'TextWrap'
1>c:\users\joe\documents\visual studio 2010\projects\mouseavoider\mouseavoider\wrappers.cpp(38): error C2084: function 'CircleWrap::CircleWrap(void)' already has a body
1> c:\users\joe\documents\visual studio 2010\projects\mouseavoider\mouseavoider\wrappers.h(16) : see previous definition of '{ctor}'
我觉得构造函数的语法错误......但我不知道为什么。我已经在线浏览了教程和示例,但我不知道为什么这样做不起作用。
编辑:它已经修复了!我混淆了声明和定义,需要修复变量本身的声明。答案 0 :(得分:3)
第一个构造函数中的错误是您声明了一个默认构造函数,而不是一个以sf::Font
为参数的构造函数。
在第二个构造函数中,您放置{}
,这意味着您正在定义没有内容的构造函数。
如果您想稍后定义构造函数的主体,则必须在末尾添加;
。
应该是:
class TextWrap : public sf::Text
{
public:
TextWrap(sf::Font font);
};
class CircleWrap : public sf::CircleShape
{
public:
CircleWrap();
};
答案 1 :(得分:1)
您已重载默认构造函数,但似乎正在访问非默认版本。
答案 2 :(得分:0)
头文件应包含声明而不是 definitions 。 TextWrap() {}
定义了一个不带参数且空体的构造函数 - 大括号是空体。您的类声明应如下所示:
class TextWrap : public sf::Text {
public:
TextWrap(sf:Font font);
}
声明/原型中的参数必须与定义中的参数匹配(例如,源文件),声明不应包含空体。