-1

動作しません

class A : public std::vector<int>
{
    explicit A()
    {
        push_back(5);
        std::cout << *this[0]; 
    }
}

error: no match for 'operator*' (operand type is 'A')
std::cout << *this[0];'

ただし、に置き換える*this[0]at(0)機能します。私はそれがそうであるように、型ではなく*this[0]型のオブジェクトを返すのは非常に奇妙だと思います。この例では、それらは同じように機能するはずではありませんか?Aintat(0)

4

1 に答える 1

3

エラーメッセージはそれを与えます:

error: no match for 'operator*' (operand type is 'A')

それはどこAから来たのですか?thisでありA* const、ポインターからオブジェクトを取得する方法は逆参照であるため、this[0].

あなたがしたい:

std::cout << (*this)[0]; 

優先順位operator[]逆参照よりも高くなります。それが最初に行われるようにする必要があります*this。もちろん、代わりに、この混乱を書くこともできます:

std::cout << this->operator[](0);

しかし、括弧をお勧めします。

于 2016-10-21T20:18:54.477 に答える