VS2022 Думает что конструктор это метод и он не определен
, Непонятное поведение VS2022
![]() |
Наши проекты:
Журнал · Discuz!ML · Wiki · DRKB · Помощь проекту |
|
| ПРАВИЛА | FAQ | Помощь | Поиск | Участники | Календарь | Избранное | RSS |
| [216.73.216.14] |
|
|
VS2022 Думает что конструктор это метод и он не определен
, Непонятное поведение VS2022
|
Сообщ.
#1
,
|
|
|
|
Здравствуйте.
Свалился на меня большой проект на C++ и вот столкнулся со странным поведение VS. Не понятно что ей надо. Есть хедер: ExtendedInquiry.h ![]() ![]() #pragma once #pragma managed #include "stdafx.h" #include "InternalStructures.h" #include <InquiryReader.h> using namespace System; using namespace System::Text; using namespace System::Collections::Generic; using namespace P::M::Common; /////////////////////////////////////////////////////// Namespace_InternalManager_Start /////////////////////////////////////////////////////// [Serializable] public ref class ExtendedInquiry { public: ExtendedInquiry(eDevType devType); void SetData(const I_ExtendedInquiryResponseBody* pInq); virtual String^ ToString() override; emApiStatusCode status; private: String^ GetHeaderStr(); String^ GetBodyStr(); <== кусь ==> void GetHWCardInfo(StringBuilder^ body, sHWCardInfo^ hi); private: eDevType deviceType; <== кусь ==> sTestStatus^ mmWaveCalibrationStatus; }; /////////////////////////////////////////////////////// Namespace_InternalManager_End /////////////////////////////////////////////////////// Два макроса пределены так: ![]() ![]() #define Namespace_InternalManager_Start namespace P \ { namespace M \ { namespace InternalManager { #define Namespace_InternalManager_End }}} Ну и соответсвующий cpp: ExtendedInquiry.cpp ![]() ![]() #include "StdAfx.h" #include "ExtendedInquiry.h" #include <rtxsrc\rtxContext.h> #include <ApiCommon\RtxUtil.h> using namespace SGApiCommon; using namespace System::Text; // The text in here does not need to be translated /////////////////////////////////////////////////////// Namespace_InternalManager_Start /////////////////////////////////////////////////////// ExtendedInquiry::ExtendedInquiry(eDevType devType) : deviceType(devType) { status = emApiStatusCode::eSuccess; esn = gcnew cli::array<Byte>(8); testDate = gcnew DateTime(); <== кусь ==> } Т.е. как бы все с виду нормально. Оба файла добавлены в проект, проект компилируется и работает. Но, VS почему-то подчеркивает конструктор в хедере и говорит что метод не определен. Хотя это конструктор и он явно определен. VCR001: Function definition for 'ExtendedInquiry' not found.
Полный ребилд и перезагрузку и прочие пинки по калесам пробовал. Если просто продублировать конструктор, даже есили он пустой. ![]() ![]() #include "StdAfx.h" #include "ExtendedInquiry.h" #include <rtxsrc\rtxContext.h> #include <ApiCommon\RtxUtil.h> using namespace SGApiCommon; using namespace System::Text; // The text in here does not need to be translated /////////////////////////////////////////////////////// Namespace_InternalManager_Start /////////////////////////////////////////////////////// ExtendedInquiry::ExtendedInquiry(eDevType devType) : deviceType(devType) { status = emApiStatusCode::eSuccess; esn = gcnew cli::array<Byte>(8); testDate = gcnew DateTime(); <== кусь ==> } ExtendedInquiry::ExtendedInquiry(eDevType devType) : deviceType(devType) { } Подчеркивание пропадает. Если старый удалить и оставить только новый, то студия опять говорит что метод не опеределен. Может кто знает почему так и как исправить? Заранее спасибо. |
|
Сообщ.
#2
,
|
|
|
|
Попробуйте для начала просто почистить файлы intellisense. Поскольку это его сообщения. Папочку .vs
Ну или отключить это предупреждение. Все таки компилятор в приоритете. Может это какой то косяк самого intellisense |
|
Сообщ.
#3
,
|
|
|
|
Цитата sharky72 @ методом деления проблемы пополам - попробуй для начала сделать минимальный законченный проект который повторял бы ошибку. далее можно уже будет смотреть. в истории мелкомягких были времена когда и студия лагала - мама не балуйся. некоторые ошибки они так и потянули дальше, некоторые спешно фиксили в следующих версиях. так например было с первым дотнетом в 2001, под си бимоль - именно я тогда вычислил их не желание компилять проекты в солюшене более 65535 байт для таргет файлов. ржали даже кони от этой сыррятины... ЗЫ вспомнилось |
|
Сообщ.
#4
,
|
|
|
|
Цитата sharky72 @ Попробуйте для начала просто почистить файлы intellisense. Поскольку это его сообщения. Папочку .vs Ну или отключить это предупреждение. Все таки компилятор в приоритете. Может это какой то косяк самого intellisense Попробовал. Ниче не поменялось. Цитата kolobok0 @ методом деления проблемы пополам - попробуй для начала сделать минимальный законченный проект который повторял бы ошибку. далее можно уже будет смотреть. Дык оно так то все правильно показывает. Это просто в нескольких парах (ну я про h + cpp) так делает. А так по всему проекто все хорошо. Я поэтому и подумал. может все-таки доло в конкретном исходнике... |
|
Сообщ.
#5
,
|
|
|
|
Сомневаюсь. Если добавлять второй конструктор - оно не откомпилится я правильно понимаю? Значит это проблема intellisense. Попробуй отключить эту проверку. Или не обращай внимания.
|
|
Сообщ.
#6
,
|
|
|
|
Не, я так не делаю, и другим не разрешаю, если могу
. Проверки не просто так придуманы. Что бы их отключать нужна серьезная причина.Понятно что проблема с интеллисенсе. Проект же копилится и работает. Но вот большая с большей частью кода нормально все, но вот в некоторых местах че-то не так. Хотелось бы не под ковер замести, а именно понять че не нравится. А уж по итогам смотреть, исправить, что более вероятно, или действительно отключить... Ладно. Посмотрим. Когда нибудь выяснится |
|
Сообщ.
#7
,
|
|
|
|
Это же Managed С++/CLI судя по синтаксису?
Может ему просто нужно явно определить дефолтный конструктор? ![]() ![]() ExtendedInquiry(){} |
|
Сообщ.
#8
,
|
|
|
|
Ну как бы да. С одной стороны если добавить какой-либо конструктор, как я и писал, то варниниг проподает...
Но, во первых есть другие классы у которых объявлен только дефолтный конструктор и у них такая же фигня. А во вторых у этого класса по дизайну не предпологается дефолтный конструктор. Я тут заметил, что похоже это происходит для всех классов в проекте. Тут довольно большой солюшен, Часть проектов C++ часть С# этот как раз "стыкует" анменеджед цпп и сишарп. И у каждого класса тут этот варнинг... Я пересоздавал солюшен в ручную и тупо перетаскивал код... Может быть не угадал с типом проекта... или забыл\неправильно добавил какой-нибудь рефернс... |
|
Сообщ.
#9
,
|
|
|
|
Насчет не предполагается - я этого не вижу. Его и так компилятор создаст. Поскольку явно не запрещено его иметь.
Я последний раз сталкивался с Managed c++ лет 5 назад. Но тогда интеллисенс был менее придирчив. Гугль то что-то говорит внятное по поводу этого предупреждения? |
|
Сообщ.
#10
,
|
|
|
|
Цитата sharky72 @ Его и так компилятор создаст. Поскольку явно не запрещено его иметь. Не создаст. Там же есть конструктор с параметрами. |
|
Сообщ.
#11
,
|
|
|
|
Да. Не создаст.
Ну тогда не знаю чем помочь. Я в Managed c++ не очень. Поскольку это не предупреждение компилятора, а интеллисенса - наверное придется игнорировать. |