在我的构造函数体中使用简单的指针语法问题

时间:2012-11-10 18:46:37

标签: c++ pointers constructor

所以我在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中的错误说:“错误:表达式必须有指向类类型的指针”

谢谢!

2 个答案:

答案 0 :(得分:2)

int不是一个类,绝对没有length()元素。您正在被“试图将另一种语言复制并粘贴到C ++中”的邪恶力量所腐蚀。唯一的解决方法是“学习C ++”。

你为什么要写自己的套装?语言附带std::set

答案 1 :(得分:1)

  1. 要回答你对DeadMG答案的评论中的问题,即使这不是你的主要问题:一般来说,你需要传递数组长度以及C中的指针(以及在C ++中使用C样式时) 。以空值终止的字符串是一个例外,因为您可以根据需要发现长度。

  2. 我同意DeadMG建议您使用标准库中的std::set而不是编写自己的类。您还需要使用标准库的其他几个位来获取findMedianfindMean的行为:

  3.     #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;
        }