派生类的新构造函数未构建:“未找到重载的成员函数”

时间:2014-02-09 02:03:29

标签: c++ class inheritance constructor sfml

我有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}'

我觉得构造函数的语法错误......但我不知道为什么。我已经在线浏览了教程和示例,但我不知道为什么这样做不起作用。

编辑:它已经修复了!我混淆了声明和定义,需要修复变量本身的声明。

3 个答案:

答案 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);
}

声明/原型中的参数必须与定义中的参数匹配(例如,源文件),声明不应包含空体。