Войти
ФлеймФорумПрограммирование

[MSVC++2010] error C2440: инициализация: невозможно преобразовать "Foo::Bar *" в "Foo::Bar *"

#0
14:00, 26 мая 2016
+ cl.exe

Минимальный код воспроизводящий ошибку:

struct Foo{
  struct Bar; // Объявляем заранее.
  void Kokoko(){}// Удалять нельзя. Это важно. Ещё можно заменить на struct Kokoko{};
  struct Bar; // Объявляем воторой раз. Это важно. Я например объявил случайно.
  struct Bar{};
  struct Main{
    Bar*ptr;
    void sic()
    {
      Bar*p=ptr; // error C2440: инициализация: невозможно преобразовать "Foo::Bar *" в "Foo::Bar *"
    }
  };
};
int main(){return 0;}

такие дела.


#1
14:45, 26 мая 2016

Adler
Разные бары походу.
А вообще "я сделал херню, почему получилась херня?"

#2
14:46, 26 мая 2016

УМВР

#3
14:51, 26 мая 2016

https://connect.microsoft.com/VisualStudio/feedback/details/622707/

#4
14:52, 26 мая 2016

cranky
Там не 2010я студия. http://rextester.com/JRIYM35790

#5
15:54, 26 мая 2016

Adler
Ну так нечего некроговном пользоваться. Сам виноват, с тем же успехом можно было выстрелить себе в ногу.

#6
8:52, 27 мая 2016

TarasB
Единственное что в этом коде немного плохо - это второй "struct Bar;", но в остальном это добротный выхлоп кодогенератора.

ArchiDevil
> Ну так нечего некроговном пользоваться.
Я перешёл на некроговно из-за того, что у свежеговна процесс intellisense(vcpkgsrv.exe) крэшется и уходит в циклический перезапуск.

#7
10:05, 27 мая 2016

Adler
Есть минимальный код, воспроизводящий проблему?

#8
10:12, 27 мая 2016

у меня в Qt mingw собралось, но он порой собирай код, на который студия ругается, например я забыл return в функции написать для объекта, мингв сожрало(правда потом можно краш схлопопать при использовании такого объекта), а студия - нет.

#9
10:53, 27 мая 2016

MAMOHT-92
-Wall -Werror наше все

#10
10:56, 27 мая 2016

Adler
> Объявляем воторой раз. Это важно. Я например объявил случайно.

Компилятор оказался в задумчивости (объявлено два Бара), и решил на всякий случай выдать ошибку

#11
11:00, 27 мая 2016

Алла я в Бар!

#12
11:56, 27 мая 2016

ArchiDevil
минимального нет, но сейчас там что типа  этого:

struct AAA{
  #include "GGG.inl" // внутри десятки define`ов и struct GGG, в ней больше 1000 шаблонных методов + ещё столько же статических функций + немного шаблонных структур + SFINAE трюки.
  struct BBB:GGG{
    // десятки define`ов
    // куча классов
   // куча разных методов
    void something(){
      #include "some_shit_header.inl"
      // какой-то простой код.
    }
    void ccc(){
      #include "some_shit_header.inl" // внутри объявляються локальные переменные. немного, штук 8. как-то так: "auto&foo=this->mem[19];"
      // немного кода.
      if(true){
        #include "more_shit.inl" // внутри тонны вызовов разных перегруженых шаблонных методов. // больше 10 уровней вложености Block scope`ов.
      }
      // немного кода.
    }
  };
};
а есть ли смысл искать минимальный код, который будет отправлять процесс intellisense в циклический перезапуск?
в таком стили никто не пишет, скорее всего никто не станет это фиксить. пока выгоды никакой. ну нафиг.
#13
22:43, 1 июня 2016

Adler
> минимального нет, но сейчас там что типа  этого:

"это" - не есть код,
который воспроизводит проблему.

Adler
> а есть ли смысл искать минимальный код, который будет отправлять процесс
> intellisense в циклический перезапуск?

в этом ровно столько же смысла,
сколько и в этом:

Adler
> Я перешёл на некроговно из-за того, что у свежеговна процесс
> intellisense(vcpkgsrv.exe) крэшется и уходит в циклический перезапуск.

ФлеймФорумПрограммирование

Тема в архиве.