C ++ / CLI Я не могу добавить класс в свою коллекцию - PullRequest
0 голосов
/ 02 февраля 2010

Я пытаюсь просто добавить класс FilterInfo в мою коллекцию FilterInfo. Я ужасно пытаюсь понять, почему следующий код продолжает выдавать ошибку:

Система :: Подборки :: Общий :: Список :: Добавить» : невозможно преобразовать параметр 1 из 'Ziz :: FilterInfo *' для 'Зиз :: FilterInfo'

Я только изучаю C ++ / CLI, так как я разработчик C #, и я уверен, что это что-то простое, но я уверен, что мог бы использовать некоторые указатели. Мой раздетый код выглядит следующим образом:

     public value class FilterInfo
    {
        public:
            char* Address;
    };

    public ref class Ziz
    {
    private:
        List<FilterInfo>^ _blockList;

    public:
        // Constructor
        Ziz(){
            _blockList = gcnew List<FilterInfo>();
        }

        List<FilterInfo>^ GetBlockList()
        {

            for each(_IPFILTERINFO ip in _packetFilter->GetBlockList())
            {
                // _IPFILTERINFO is the native C++ struct.
                FilterInfo* f = new FilterInfo();
                _blockList->Add(f);
            }
            return _blockList;
        }

Ответы [ 5 ]

2 голосов
/ 02 февраля 2010

Вы объявили _blockList как

List<FilterInfo>^ _blockList;

но вы пытаетесь добавить

FilterInfo* f

к нему. Он не может работать, так как один - указатель, а другой - ссылка.

Я не уверен, как "значение" подходит, но в

public value class FilterInfo
{
    public:
        char* Address;
};

Вы ранее объявили неуправляемый класс чтобы сделать это управляемым, вы должны использовать

public ref class FiterInfo

Это позволит вам использовать FilterInfo * без явного управления памятью.

Наконец, char * не так хорош в C ++ / CLI, я бы рекомендовал использовать System :: String

1 голос
/ 02 февраля 2010
_blockList->Add(*f);
0 голосов
/ 18 октября 2010
public ref class A

{ }; * * Тысяча два

int main(array<System::String ^> ^args)  
{  
      Console::WriteLine(L"Hello World");  
      ICollection<A^>^ oCollection = gcnew List<A^>();  
      oCollection->Add(gcnew A());  
      return 0;  
}
0 голосов
/ 02 февраля 2010

FilterInfo не FilterInfo*. Если вы хотите список указателей на FilterInfo, вам нужно сказать, что List<FilterInfo*>. Поскольку FilterInfo здесь является классом значений, вы, вероятно, просто захотите пропустить new.

     FilterInfo fi;
     _blockList->Add(fi);
0 голосов
/ 02 февраля 2010

Вы должны также построить свой FilterInfo с gcnew.Вы не можете смешивать и смешивать их без маршалинга.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...