如何用C中的for循环创建多个对象?
我试图使用for循环创建多个对象,因为最终我会希望这个程序根据我的输入创建不同数量的类.我试图使用上一个
question的答案写这个.但是,当我尝试编译时,我得到错误’没有匹配的功能调用’Genes :: Genes()’
#include <iostream> #include <cstdlib> #include <ctime> using namespace std; float random(); class Genes{ public: double cis; double coding; double effect; Genes(double a,double b,double c); }; Genes::Genes(double a,double c) { cis=a; coding=b; effect=c; }; int main() { int geneno,i; srand(time(NULL)); geneno=4; //this will probably be cin later Genes *genes=new Genes[10] for(i=0;i<=geneno;i++){ double d,e,f; d=random(); e=random(); f=random(); genes[i]=Genes(d,f); cout<<"cis is "<<genes.cis<<'n'; cout<<"coding is "<<genes.coding<<'n'; cout<<"Effect for gene is "<<genes.effect<<'n'; } delete[] genes; } float random(){ float decRANDMAX; decRANDMAX=RAND_MAX*1.0; return rand()%(RAND_MAX+1)/decRANDMAX; } 解决方法
在C中,使用new []创建一个数组使用其默认/无参数构造函数初始化所有对象.
所以这一行:(分号添加) Genes *genes=new Genes[10]; 将导致Genes :: Genes()的十个呼叫. 这通常看起来很好,因为当你不声明任何时候,C会给你一个默认的构造函数.但是,为了实现这一点,您不能声明任何构造函数.你的构造函数: Genes::Genes(double a,double c) 防止编译器为您创建一个默认构造函数,这反过来又会阻止您创建一个Genes对象数组. 这个问题有两个合理的解决方案: >您可以向Genes类添加一个默认/无参数构造函数.这很简单,但缺乏一些优雅.什么是默认的Genes对象?如果这样的对象是有意义的,那么你可能已经声明了一个默认构造函数. 矢量类允许您声明一个容量,您将放入数组中的对象数量(或者您不能声明容量,导致较慢的插入).然后,当它们被放置到向量中时,它将仅构造对象.你的代码看起来像这样: #include <vector> // to get the vector class definition using std::vector; // to vector<Genes> genes; genes.reserve(geneno); // optional,but speeds things up a bit for(i = 0; i <= geneno; i++) { double d = random(); double e = random(); double f = random(); genes.push_back(Genes(d,f)); } 最后一句话(大致)相当于: Genes temp(d,f); genes.push_back(temp); vector :: push_back将一个项目添加到向量的背面,并将向量容量增加1:http://www.cplusplus.com/reference/stl/vector/push_back/ 您可以随后以与阵列相同的方式访问向量中的元素: cout << "The third gene's coding is " << genes[3].coding << endl; 您可以使用vector :: size()查询向量的大小: cout << "The vector has " << genes.size() << "elements" << endl; (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |