gpt4 book ai didi

c++ - 用类 fnc 中的数据填充 vector

转载 作者:行者123 更新时间:2023-11-28 08:10:45 25 4
gpt4 key购买 nike

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

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

// 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 !!

}

最佳答案

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

“list和map等STL/CLR容器是作为模板引用类实现的。因为C++模板是在编译时实例化的,所以两个具有完全相同签名但在不同程序集中的模板类实际上是不同的类型。这意味着模板类不能跨程序集边界使用。”

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

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

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

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

我还会注意到,在 x 和 y 上使用“static”对我来说似乎很可疑。你确定你只想要其中之一吗?

关于c++ - 用类 fnc 中的数据填充 vector ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9154926/

25 4 0
文章推荐: javascript - 如何通过观察其他