用类fnc中的数据填充向量

时间:2012-02-06 02:14:46

标签: c++ managed-c++

我有一个自定义数据类型数组和向量,如下所示。在Foo函数中,我开始用数据填充数组和向量。无论如何,使用数据填充数组没有问题。但是我无法使用矢量访问任何内容。我找不到我错过的东西。

有没有办法用数据填充矢量对象。

// MyClass.h
#include <cliext/vector>
using namespace System;
using namespace cliext;

public ref class MyClass {

private :
static int x ;
static float y ;
String ^name;

public :
static array<MyClass ^> ^myArray = gcnew array <MyClass^> (3) ;
static vector<MyClass^> ^myVector = gcnew vector <MyClass^> (3) ;

void Foo();

};

// MyClass.cpp
#include "stdafx.h"
#include <MyClass.h>

void MyClass::Foo()
{
myArray[0] = gcnew MyClass;
myVector[0] = gcnew MyClass;

myArray[0]->x = 100 ;
myArray[0]->x = 99.5 ;
myArray[0]->name = "Good" ;

myVector[0]->CAN'T ACCESS ANY CLASS DATA MEMBER !!

}

1 个答案:

答案 0 :(得分:1)

以下是MSDN解释发生了什么:How to: Expose an STL/CLR Container from an Assembly

“列表和映射等STL / CLR容器被实现为模板引用类。由于C ++模板在编译时被实例化,因此具有完全相同签名但位于不同程序集中的两个模板类实际上是不同的类型。这意味着模板类不能跨装配边界使用。“

据我了解,您的公共类正在尝试导出vector的模板特化,但是它将具有与同一向量的外部声明不同的签名,并且永远不会匹配。

您可能想要像这样更改myVector元素(为我编译):

static cliext::vector<MyClass^>::generic_container ^myVector = gcnew cliext::vector<MyClass^>(3); 

另一种选择是不将您的类标记为“公共”,因此编译器不会尝试使其在程序集之外可用。

我还会注意到在x和y上使用'static'似乎对我很怀疑。你确定你只想要其中一个吗?