无法从朋友功能访问私有变量?

时间:2014-07-26 01:30:15

标签: c++

出于某种原因,我似乎无法从友元函数访问私有变量。这是有问题的功能:

IntArray operator+(const IntArray& in1){
    int secArray[SIZE];
    IntArray a;
        for (int i = low(); i <= compare(high(), in1.high()); i++){
            a.iArray[i] = iArray[i] + in1.iArray[i];              // Combine elements of array   to new array
        }
        return a(iArray);
    }
    else{
        cout << "Error, second array larger than first. Exiting";   // If second array size is larger than first
        exit(0);
    }
}

这是我的头文件:

#ifndef _INTARRAY_H
#define _INTARRAY_H
#include <iostream>
#include <string>

using namespace std;

const int SIZE = 100;

class IntArray{
private:
    int iArray[SIZE];
    int arrLower, arrUpper;
    int size;
    string name;

public:
    IntArray();
    IntArray(int range);
    IntArray(int lower, int upper);
    IntArray(const IntArray& input);
    int high() const;
    int low() const;
    int compare(int in1, int in2) const;
    int operator==(const IntArray& in);
    int operator!=(const IntArray& in);
    void setName(string input);
    IntArray& operator=(const IntArray& in);
    int& operator[] (int size)             {  return iArray[size];  }
    IntArray& operator+=( const IntArray& );
    friend IntArray operator+( const IntArray in1 );
    friend ostream& operator<<(ostream& os, const IntArray& i);



};



#endif

其次,在对每个成员求和之后返回数组的正确方法是什么?

2 个答案:

答案 0 :(得分:1)

您的朋友声明缺少参考声明者:

friend IntArray operator+( const IntArray in1 );

所以这是一个不同的功能。它必须完全匹配函数:

       IntArray operator+(const IntArray& in1)

(你也默默地按值传递数组(SLOW!))

答案 1 :(得分:0)

主要问题是你要声明这个朋友的功能:

friend IntArray operator+( const IntArray in1 );

但您正在定义此功能:

IntArray operator+(const IntArray& in1){
//                               ^

另一个问题是在函数内部使用的是未定义的iArray对象。您可能意味着该函数接受两个IntArray而不是一个。


原来你根本不需要全班。它的大多数功能都可以使用标准库来实现。

  1. std::array<int, SIZE>代替IntArray
  2. std::max_element代替high函数
  3. std::min_element代替low函数
  4. std::equal代替operator==operator!=
  5. 等等。您可能希望查看std::mergestd::copy operator+