Je suis en train d'imprimer une valeur d'un élément de tableau comme cout << array[0]
, (où le tableau est une classe glorifiée utilisant l'opérateur []), mais le système en tapant C++ semble incroyablement confus. L'erreur GCC est la suivante:C++ taper la confusion avec les opérateurs << et []
example.cpp:44:20: error: no match for ‘operator<<’ in ‘std::cout << a_0.fixedarr<T, N>::operator[] [with T = int, long unsigned int N = 5ul, size_t = long unsigned int](0ul)’
(La source entière provient de quelque chose de plus compliqué, mais je pense que je l'ai Pared vers le bas à un exemple minimal).
#include <assert.h>
#include <cassert>
#include <climits>
#include <cstdio>
#include <iostream>
using namespace std;
template<typename T>
class fixedarrRef{
T* ref;
int sz;
public:
fixedarrRef(T* t, int psz){ ref = t; sz = psz;}
T val(){ return ref[0]; }
};
template<typename T, size_t N>
class fixedarr{
public:
T arr[N];
fixedarr(){
for(int i=0; i<N; ++i){
arr[i] = 0;
}
}
inline fixedarrRef<T> operator[] (const size_t i) const{
assert (i < N);
return fixedarrRef<T>((T*)&arr[i], N-i);
}
};
template <typename T>
ostream & operator << (ostream &out, fixedarrRef<T> &v)
{
return (out << v.val());
}
int main() {
fixedarr<int, 5> a_0;
fixedarrRef<int> r = a_0[0];
cout << (a_0[0]) << endl;
// cout << r << endl;
return 0;
}
Notez que le code commenté à la fin fonctionne. Merci d'avance.
impressionnant, quelle douleur [avec C++, pas vous, merci pour la réponse] :) – gatoatigrado
Vous pouvez lire la raison réelle ** pourquoi ** vous devriez le faire dans la réponse de Naveen ci-dessous. –