Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/templates/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 将未知数量的参数传递给构造函数_C++_Templates_Sfml - Fatal编程技术网

C++ 将未知数量的参数传递给构造函数

C++ 将未知数量的参数传递给构造函数,c++,templates,sfml,C++,Templates,Sfml,我正在创建一个类,它接受未知数量的对象,然后在屏幕上绘制它们 我试图利用模板,但不知道它们是如何工作的,到目前为止,我阅读的每一个资料都显示了一种不同的写作方式 .cpp //文件composite.cpp #包括 #包括“composite.h” #包括“copy.h” 模板类可绘制 复合::复合(){ 可拉伸形状; } 空心绘制(sf::渲染窗口和窗口,sf::矢量2F位置){ 对于(int i=0;i

我正在创建一个类,它接受未知数量的对象,然后在屏幕上绘制它们

我试图利用模板,但不知道它们是如何工作的,到目前为止,我阅读的每一个资料都显示了一种不同的写作方式

.cpp

//文件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 &copy1, drawable &copy2, drawable &copy3){}
composite::composite(drawable &copy1 = nullptr, drawable &copy2 = nullptr, drawable &copy3 = nullptr)