Ale9308 Ответов: 1

Ошибка C2143: синтаксическая ошибка: отсутствует '; ' перед '^'


У меня есть следующая проблема, у меня есть класс A, который имеет экземпляр класса B, А класс B имеет экземпляр класса A. в VisualStudio 2013 дает мне ошибку.
error C2143: syntax error: missing ';' Before '^'

Ниже приведен код класса. Заранее спасибо

Что я уже пробовал:

#include "stdafx.h"
#include "BAsterNode.h"

using namespace System;
using namespace System::Collections::Generic;

ref class BAsterInfo
{
private:
	IComparable^ info;
	BAsterNode^ enlaceMayores; /* error C2143 */
public:
	IComparable^ GetInfo();
	void SetInfo(IComparable^);
	BAsterNode^ GetEnlaceMayores();
	void SetEnlaceMayores(BAsterNode^ enlaceMayoresP);
};


а че другого класса

#include "stdafx.h"
#include "BAsterInfo.h"

using namespace System;
using namespace System::Collections::Generic;
using namespace System::Reflection;

ref class BAsterNode
{
private:
	BAsterNode^ enlaceMenores;
	List<BAsterInfo^>^ listaInformacion;
		int Find(BAsterInfo^ info);
public:
	List<BAsterInfo^>^ GetListaInfo();
	void SetListaInfo(List<BAsterInfo^>^ listaInfoP);
	BAsterNode^ GetEnlaceMenores();
	void SetEnlaceMenores(BAsterNode^ enlaceMenoresP);
};

Ravi Bhavnani

Вы путаете синтаксис Pascal с C/C++? Вы хотели использовать * или действительно хотите использовать ссылку на дескриптор?

/ Рави

[no name]

Похоже на C++/CLI, так что ^ будет правильным.

Ravi Bhavnani

Да, именно это я и имел в виду, говоря о ручке.

/ Рави

Richard MacCutchan

BasterInfo включает BasterNode, а BasterNode включает BasterInfo; это может сбить с толку компилятор.

1 Ответов

Рейтинг:
6

KarstenK

Ричард Мак Катчан прав, вы включили оба заголовка наоборот, и это ошибка.

Я бы оценил это как "ошибку проектирования". Поэтому вам лучше переосмыслить линию, где происходит C 2143.

Другое решение - это так называемая "прямая декларация". Это означает объявить имя класса. (Я надеюсь, что это работает как в C++)

Удалите или прокомментируйте включение !!!

//#include "BAsterNode.h
class BAsterNode; // forward declaration of the class


Philippe Mori

Ну, а так как это явно управляемый класс, то форвардное объявление также нуждается в ref модификатор.