C++ 将未知数量的参数传递给构造函数
我正在创建一个类,它接受未知数量的对象,然后在屏幕上绘制它们 我试图利用模板,但不知道它们是如何工作的,到目前为止,我阅读的每一个资料都显示了一种不同的写作方式 .cppC++ 将未知数量的参数传递给构造函数,c++,templates,sfml,C++,Templates,Sfml,我正在创建一个类,它接受未知数量的对象,然后在屏幕上绘制它们 我试图利用模板,但不知道它们是如何工作的,到目前为止,我阅读的每一个资料都显示了一种不同的写作方式 .cpp //文件composite.cpp #包括 #包括“composite.h” #包括“copy.h” 模板类可绘制 复合::复合(){ 可拉伸形状; } 空心绘制(sf::渲染窗口和窗口,sf::矢量2F位置){ 对于(int i=0;i
//文件composite.cpp
#包括
#包括“composite.h”
#包括“copy.h”
模板类可绘制
复合::复合(){
可拉伸形状;
}
空心绘制(sf::渲染窗口和窗口,sf::矢量2F位置){
对于(int i=0;i<10;++i){
//如果(部分[i]!=NULL){
//绘图部分
//零件[i].draw();
//}
}
}
.水电站
//文件composite.hpp
#综合水电站
#定义综合水电站
#包括
#包括“drawable.h”
#包括“copy.h”
模板
类别组合:公共可提取{
公众:
复合::复合();
void draw(sf::RenderWindow&window,sf::Vector2f位置){};
私人:
复制*shape1、*shape2、*shape3;
复制*部分[10];
};
#恩迪夫
现在我得到了类似“errorC2514:“composite”:类没有构造函数的错误,但我很确定我已经为该类创建了一个构造函数
我做错了什么
我做错了什么
我认为你已经尝试过将代码过于简单化,这不是一件小事,你应该重新设置你的研究
很容易使用他人的模板来实现他们设计的目标(例如std::vector)。设计自己的模板更加困难。根据这个问题中的代码,我不确定您以前是否做过简单的模板。您的代码没有显示出对使用模板实现参数化类的概念的理解,这比将多个参数传递给构造函数的概念更基本。如果您想要一个接受多个参数的函数,也许这可以帮助您:
template <typename... Args>
void function(Args&&... args) {
//Do something with args or forward it..
//(std::forward<Args>(args)...);
}
模板
无效函数(Args&&…Args){
//使用args执行某些操作或转发它。。
//(标准:转发(args)…);
}
p.D.也许你应该更好地解释你的问题,以便得到更好的答案。我找到了解决问题的办法。 如果我想让构造函数接受一组变量参数,我应该执行以下操作: cpp 水电站
通过这种方式,我可以使用0..3个参数调用构造函数(在实际赋值中是0..10,但我在这里将其缩小,因为这只是一个示例)。我认为您应该会得到更多的错误。
composite.cpp
中的构造函数定义在语法上看起来不正确。另外,请编辑您的问题,以显示发生错误的代码(即创建composite
对象的位置)以及完整且未经编辑的生成日志。@JoachimPileborg是的,但是模板的定义是否确实正确?您试图用模板类drawable composite::composite()做什么{…}
?@jaggedSpire我想创建一个接受可变数量参数的构造函数。那么,没问题。你没有时间学习如何做一些事情,你需要去做。结论很明显:你会失败的。没关系(至少在这一点上)。我仍然建议你试着学习如何做,而不是胡闹。链接的资源确实会教你如何做。如果你没有时间阅读它们,那就意味着你没有时间解决你的问题!
// file composite.hpp
#ifndef _COMPOSITE_HPP
#define _COMPOSITE_HPP
#include <SFML/Graphics.hpp>
#include "drawable.h"
#include "copy.h"
template<typename arguments>
class composite : public drawable {
public:
composite<arguments>::composite();
void draw(sf::RenderWindow & window, sf::Vector2f position) {};
private:
copy *shape1, *shape2, *shape3;
copy *parts[10];
};
#endif
template <typename... Args>
void function(Args&&... args) {
//Do something with args or forward it..
//(std::forward<Args>(args)...);
}
composite::composite(drawable ©1, drawable ©2, drawable ©3){}
composite::composite(drawable ©1 = nullptr, drawable ©2 = nullptr, drawable ©3 = nullptr)