Передовые декларации С++/CLI

У меня заголовок выглядит так:

namespace Dummy
 {
 ref class ISYSession {};

 namespace Afw
 {
 /// <summary>Sammlung von AFW-Utility-Methoden</summary>
 public ref class AfwUtility
 {
 public:
 static void CopyAFWParamsToIDictionary(AFWParams ¶meterIn, System::Collections::IDictionary^ parameterOut);
 static AFWParams* CopyIDictionaryToAFWParams(System::Collections::IDictionary^ dictionary);
 static void ShowExceptionLog(System::String^ sessionId);
 static void ShowStatementLog(System::String^ sessionId);
 static Dummy::ISYSession^ GetSession(AFWAppClass *acl);
 };
 }
 }

Если я не использую заголовок для моего класса ref, я не могу использовать его в той же сборке. Но с этим заголовком мой код больше не компилируется.

Это первые две ошибки:

c:\develop...\xy.dll: warning C4944: 'ISYSession': Das Symbol kann nicht aus 'c:\develop...\xy.dll' importiert werden: 'Dummy :: ISYSession' ist bereits im aktuellen Bereich vorhanden.

(английский: "Dummy :: ISYSession": символ не может быть импортирован из xy.dll: Dummy :: ISYSession уже существует в текущей области. ")

ошибка C3699: "^": Diese Referenzierung kann nicht für den Тип "********* :: CS :: SY :: ISYSession" verwendet werden.

(английский: "Эта ссылка не может использоваться для типа" Dummy :: ISYSession ".)

Как это должно работать? Для меня кажется, что компилятор считает, что класс рефлексии ISYSession определен в той же сборке (чего нет, он определен в другой.NET DLL).

1 ответ

ref class ISYSession {};

Это не форвардное объявление, это фактическое определение класса для класса без членов. Fix:

ref class ISYSession;

licensed under cc by-sa 3.0 with attribution.