出于某种原因,我似乎无法从友元函数访问私有变量。这是有问题的功能:
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
其次,在对每个成员求和之后返回数组的正确方法是什么?
答案 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
而不是一个。
原来你根本不需要全班。它的大多数功能都可以使用标准库来实现。
std::array<int, SIZE>
代替IntArray
std::max_element
代替high
函数std::min_element
代替low
函数std::equal
代替operator==
和operator!=
等等。您可能希望查看std::merge
或std::copy
operator+
。