0

所以总的来说,我对 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 数组作为参数传递,那么当我想引用该参数的长度时,我不必使用
-> 而不是 . 因为referent是指针对象而不是传统意义上的对象?

哦,顺便说一句,VS 2010 中的错误是“错误:表达式必须具有指向类类型的指针”

谢谢!

4

2 回答 2

2

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

你为什么还要写自己的作品集?该语言带有std::set.

于 2012-11-10T18:48:27.980 回答
1
  1. 要回答您对 DeadMG 答案的评论中的问题,即使这不是您的主要问题:通常,您需要在 C 中传递数组长度和指针(以及在 C++ 中使用 C 样式时)。空终止字符串是一个例外,因为您可以根据需要发现长度。

  2. 我同意 DeadMG 建议您使用std::set标准库而不是编写自己的类。您还需要使用标准库的其他一些位来获得findMedianand的行为findMean

    #include <迭代器>
    #include <数字>

    std::set<int> s;
    // 初始化它...
    int mean = std::accumulate(s.begin(), s.end(), 0);
    均值 /= s.size(); // 你真的要使用双精度数吗?

    // std::set 是有序的,所以找到中位数只是迭代到中间。
    整数中位数;
    std::set<int>::iterator i = s.begin();
    std::advance(i, s.size() / 2);
    如果 (s.size() % 2 == 1) {
      中位数 = *i;
    } 别的 {
      中位数 = (*i + *(++i)) / 2;
    }
于 2012-11-10T19:13:15.827 回答