给出一个最小的例子:
#ifndef ARR_H_
#define ARR_H_
#include <iostream>
class Array {
public:
Array();
int operator[](int idx);
private:
int arr[10];
};
int Array::operator[](int idx) {
std::cout << "ok";
return arr[idx];
}
#endif
我试图创建一个对象
#include "test.h"
#include <iostream>
int main() {
std::cout << "Create" << std::endl;
Array obj();
int i = obj[0];
return 0;
}
为什么我会收到错误
main.cpp: In function ‘int main()’:
main.cpp:7:18: warning: pointer to a function used in arithmetic [-Wpointer-arith]
int i = obj[0];
^
main.cpp:7:18: error: invalid conversion from ‘Array (*)()’ to ‘int’ [-fpermissive]
为什么不使用我的operator[]
?
答案 0 :(得分:1)
此
Array obj();
是一个没有参数且返回类型为Array的函数声明。
只需写下
Array obj;
考虑到如果你想使用运算符为数组的元素赋值,那么当它返回对元素的引用时会更好
int & operator[](int idx);
您也可以为常量对象声明此运算符
const int & operator[](int idx) const;
或
int operator[](int idx) const;
答案 1 :(得分:0)
这被视为函数声明而不是对象。
Array obj();
替换为
Array obj;