Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Общие вопросы по .NET и C# > error CS1501: No overload for method 'AddInfo'


Автор: Mastkir 27.10.2006, 20:32
Здравствуйте.

Понадобилось мне объявить структуру внутри класса-контейнера таких структур.
Пишу (здесь очень урезанная версия):

namespace XXX {

   public ref class InfoContainer{

      public:
         ref struct Info{
             Info(...){...} 
         };

      InfoContainer(){};
      void AddInfo(Info info){...};

   }
}
 // этот код написан на CLI.

Все скомпилировалось.  smile Хочу это все использовать. Пишу:

using XXX;

namespace YYY {

    public partial class MainFrame : Form{

        public MainFrame() 
        {
              InfoContainer info_container = new InfoContainer();
              InfoContainer.Info info = new InfoContainer.Info(...);
              info_container.AddInfo(info);
        }
    }
}// 
этот код написан на C#.


И на последнюю строчку( т.е. на info_container.AddInfo(info); )

Пишется error CS1501: No overload for method 'AddInfo'  smile 

ПочемУ?  smile  Как это исправлять?  На С++ такие вещи легко компилируются.

Автор: ivashkanet 27.10.2006, 21:02
Цитата(Mastkir @  27.10.2006,  20:32 Найти цитируемый пост)
 void AddInfo(Info info){...};

Скорее всего, метод без модификатора объявляется как private 
P.S. В C# так, может и в CLI (это IL?) так

Автор: archimed7592 28.10.2006, 02:49
ivashkanet, он имел ввиду Managed C++ aka C++.NET

Mastkir, в managed c++ не совсем та же разница между class и struct, что и в c#
в c# class - ссылочый тип, struct - тип данных. в c# все поля по умолчанию private
в с++ class и struct отличаются тем, что по умолчанию поля в одних private, а в других public. за "ссылочность" отвечают слова ref и value. ключевое слово ref говорит, что у тебя ссылочный тип (обыкновенный класс), stuct - по умолчанию все поля public.
Код
namespace XXX {

   public ref class InfoContainer{

      public:
         ref struct Info{
             Info(...){...} 
         };

      InfoContainer(){};
      void AddInfo(Info ^info){...}; // всё будет работать, если передавать хендл на управляемую кучу - это же ссылочный объект

   }
}

то что тебе нужно - это value class\struct - аналог stuct из c#
Код
namespace XXX {

   public ref class InfoContainer{

      public:
         value struct Info{ //<<======= непараметризованный конструктор нельзя переопределить
             Info(...){...} 
         };

      InfoContainer(){};
      void AddInfo(Info info){...}; // всё будет работать и так

   }
}

Автор: Mastkir 30.10.2006, 13:19

Спасибо  smile  smile  smile.

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)