заполнить вектор данными внутри класса fnc - PullRequest
0 голосов
/ 06 февраля 2012

У меня есть пользовательский массив данных и вектор, как показано ниже. В функции 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 Ответ

1 голос
/ 06 февраля 2012

Вот MSDN, объясняющее, что происходит: Как: представить контейнер STL / CLR из сборки

"Контейнеры STL / CLR, такие как list и map, реализованы как классы ref шаблонаПоскольку шаблоны C ++ создаются во время компиляции, два класса шаблонов, которые имеют абсолютно одинаковую сигнатуру, но находятся в разных сборках, на самом деле являются разными типами. Это означает, что классы шаблонов нельзя использовать за пределами границ сборки. "

Как яПоймите, ваш открытый класс пытается экспортировать шаблонную специализацию вектора, но он будет отличаться от внешней декларации того же вектора и никогда не будет совпадать.

Возможно, вы захотите изменить элемент myVector следующим образомthis (который компилируется для меня):

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

Другой вариант - не помечать ваш класс как 'public', чтобы компилятор не пытался сделать его пригодным для использования вне вашей сборки.

Также отмечу, что использование «static» для x и y кажется подозрительныме.Вы уверены, что хотите только один из них?

...