C++ cli C++;CLI嵌套默认索引

C++ cli C++;CLI嵌套默认索引,c++-cli,C++ Cli,我有一个包含对象列表的类,其中有一个默认索引属性。每个对象都有一个列表,我想为其创建另一个默认索引 public ref class Foo { //List of Bars public: property Bar^ default[int]; //Returns a Bar } public ref class Bar { //List of things public: propert

我有一个包含对象列表的类,其中有一个默认索引属性。每个对象都有一个列表,我想为其创建另一个默认索引

    public ref class Foo
    {
    //List of Bars
    public:
        property Bar^ default[int]; //Returns a Bar
    }

    public ref class Bar
    {
    //List of things
    public:
        property Thing^ default[int]; //Returns a Thing
    }
而不是用

    Foo.Bars[i].Things[k] 
…我想做一些像

    Foo[i][k] 
…去拿我的东西

它告诉我

无法使用给定的参数列表调用函数Foo::default[int]::get

参数类型为get(int,int)

…好像我试图调用get(int,int),但这不是我的意图

如果我在Foo中有另一个默认索引,它是二维的,其中第二个维度从条中返回内容,但我希望有一个实现,其中内容无法从Foo访问

非常感谢您的指导。

这:

public ref class Thing
{

};

public ref class Bar
{
    //List of things
public:
    property Thing^ default[int]
    {
        Thing^ get(int index)
        {
            return gcnew Thing();
        }
    }//Returns a Thing
};

public ref class Foo
{
    //List of 
public:
    property Bar^ default[int]
    {
        Bar^ get(int index)
        {
            return gcnew Bar();
        }
    }
};
然后

Foo^ test = gcnew Foo();
Thing^ res = test[5][3];

正确编译。您可能没有包括
get
部分,或者您将
Foo
类放在
Bar
类之前。

很难猜到您做了什么,闻起来您试图让Foo[i,k]工作。它必须是Foo[i][k],这是正确的。Foo[i][k]和Foo[i,k]工作,因为我添加了一个多维默认索引器作为测试。我需要它来测试第一个括号对,并用第二个括号对结果进行索引,它认为它们是同一对象上的两个索引器。可能会有一个装饰者强迫我们这样做吗?请关注向我们展示正确的复制代码。@xanatos下面的代码是复制问题的完美例子。请尝试一下,如果它对您也有效,那么问题肯定在我这边。@HansPassant我有一个“有趣”的问题,我给Bagaboo作为解决方案的代码运行正确,但编辑器(VS2017)将索引器的使用标记为错误(Intellisense给出了E1767错误)。我正在一个“新的”干净的控制台C++/CLI项目上完成它。我在一个新项目中做了完全相同的测试,但得到了相同的错误。这就好像它将test[5][3]视为test::get(5,3)。我们可能会有不同的配置吗?在这种情况下会是什么配置?@Bagaboo我使用的是VS 2017。。。我注意到编辑器将
test[5][3]
标记为错误,但编译器编译正确,如果我使用F5运行代码,代码运行正常。这意味着我们有完全相同的“问题”,因为我刚运行它时它就工作了,但intellisense仍然显示错误。我将对此进行故障排除。非常感谢。