所以我在C ++和C语言方面都很陌生,现在我们有一个项目将在几天内完成,我已经差不多完成了。我不时会出现几个问题。现在我遇到了通过构造函数正确分配类数据成员的问题。
以下是我正在尝试创建的有问题的类的代码:
#include <iostream>
#include <string>
class Set{
private:
int *setOfElements;
int noOfElements;
public:
Set::Set(int *setArray){
setOfElements = setArray;
noOfElements = setArray->length();
}
int *getSetOfElements(){ return setOfElements; }
int getNoOfElements(){ return noOfElements; }
int findMedian();
int findMean();
};
错误出现在构造函数体的第二行。如果我将int数组作为参数传递,那么当我想引用该参数的长度时,我不必使用
- &GT;代替 。因为指称对象而不是传统意义上的对象?
哦顺便说一下,VS 2010中的错误说:“错误:表达式必须有指向类类型的指针”
谢谢!
答案 0 :(得分:2)
int
不是一个类,绝对没有length()
元素。您正在被“试图将另一种语言复制并粘贴到C ++中”的邪恶力量所腐蚀。唯一的解决方法是“学习C ++”。
你为什么要写自己的套装?语言附带std::set
。
答案 1 :(得分:1)
要回答你对DeadMG答案的评论中的问题,即使这不是你的主要问题:一般来说,你需要传递数组长度以及C中的指针(以及在C ++中使用C样式时) 。以空值终止的字符串是一个例外,因为您可以根据需要发现长度。
我同意DeadMG建议您使用标准库中的std::set
而不是编写自己的类。您还需要使用标准库的其他几个位来获取findMedian
和findMean
的行为:
#include <iterator> #include <numeric> std::set<int> s; // Initialize it... int mean = std::accumulate(s.begin(), s.end(), 0); mean /= s.size(); // Would you really want to use a double? // std::set is ordered, so finding the median is just iterating to the middle. int median; std::set<int>::iterator i = s.begin(); std::advance(i, s.size() / 2); if (s.size() % 2 == 1) { median = *i; } else { median = (*i + *(++i)) / 2; }