派生类的新构造函数未生成:"overloaded member function not found"



我有 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);
}
声明

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

最新更新