C ++-программа, использующая компилятор haskell, когда он содержит ошибки в коде vs

Trashtalk спросил: 28 марта 2018 в 04:38 в: c++

Когда у меня есть следующий фрагмент кода:

#include <iostream>
#include <queue>using namespace std;struct Card
{
    enum suit {CLUBS, DIAMONDS, HEARTS, SPADES};
    suit Suit;
    int rank; 
};class Deck 
{
    queue<Card> deck;public:
    //create the deck of cards
    for(int i = 0; i <= 4; i++) 
    {
        for(int j = 0; j <= 13; j++)
        {
            Card temp = {i, j}
        }
    }
};int main()
{
    std::cout < "Hello\n";}

Это содержит некоторые ошибки, которые не являются проблемой. Проблема заключается в сообщениях об ошибках, которые я получаю. Первая часть понятна:

> Executing task: g++ -g main.cpp <main.cpp:19:5: error: expected unqualified-id before 'for'
     for(int i = 0; i <= 4; i++)
     ^~~
main.cpp:19:20: error: 'i' does not name a type
     for(int i = 0; i <= 4; i++)
                    ^
main.cpp:19:28: error: 'i' does not name a type
     for(int i = 0; i <= 4; i++)
                        ^

Вторая часть, однако, похоже, что она пыталась скомпилировать код с помощью компилятора Haskell.

main.cpp: In function 'int main()':
main.cpp:31:15: error: no match for 'operator<' (operand types are 
'std::ostream {aka std::basic_ostream<char>}' and 'const char [7]')
     std::cout < "Hello\n";
     ~~~~~~~~~~^~~~~~~~~~~
In file included from C:/Program Files/Haskell 
Platform/8.2.2/mingw/include/c++/6.2.0/bits/stl_algobase.h:64:0,
                 from C:/Program Files/Haskell 
Platform/8.2.2/mingw/include/c++/6.2.0/bits/char_traits.h:39,
                 from C:/Program Files/Haskell 
Platform/8.2.2/mingw/include/c++/6.2.0/ios:40,
                 from C:/Program Files/Haskell 
Platform/8.2.2/mingw/include/c++/6.2.0/ostream:38,
                 from C:/Program Files/Haskell 
Platform/8.2.2/mingw/include/c++/6.2.0/iostream:39,
                 from main.cpp:1:
C:/Program Files/Haskell 
Platform/8.2.2/mingw/include/c++/6.2.0/bits/stl_pair.h:369:5: note: 
candidate: template<class _T1, class _T2> constexpr bool 
std::operator<(const std::pair<_T1, _T2>&, const std::pair<_T1, _T2>&)
     operator<(const pair<_T1, _T2>& __x, const pair<_T1, _T2>& __y)
     ^~~~~~~~

Это продолжается некоторое время, поскольку программа c ++ не является точно действительным кодом Haskell. Я хотел бы знать, как решить эту проблему, поскольку она отлаживает большую проблему. Я использую VSCode, и хотя я могу поделиться своим файлом c_cpp_properties.json, я уже уверен, что получил это право, и я не хочу, чтобы вопрос был еще дольше.

1 ответ

Есть решение
Quimby ответил: 28 марта 2018 в 05:25

Это компилятор c ++, а не Haskell. Как отмечали другие в комментариях, нельзя указывать цикл (или любой исполняемый код в этом отношении) в определении класса.

Давайте попробуем разобраться второе сообщение об ошибке:

main.cpp: In function 'int main()':
main.cpp:31:15: error: no match for 'operator<' (operand types are 
'std::ostream {aka std::basic_ostream<char>}' and 'const char [7]')
     std::cout < "Hello\n";
     ~~~~~~~~~~^~~~~~~~~~~

написав std::cout < "Hello\n";, вы сказали, что хотите сравнить std::cout, который является объект с std::ostream (строка). Компилятор сказал вам, что не знает, как это сделать. Потому что формально вы запросили функцию const char [7], но она не нашла ее.

Но она нашла следующие две функции:

template<class _T1, class _T2> constexpr bool 
std::operator<(const std::pair<_T1, _T2>&, const std::pair<_T1, _T2>&)
     operator<(const pair<_T1, _T2>& __x, const pair<_T1, _T2>& __y)

Компилятор подумал, что, возможно, вы хотели позвонить им, вы знаете, возможно, вы сделали опечатку или что-то. Компилятор также сказал вам, где они находятся:

C:/Program Files/Haskell 
Platform/8.2.2/mingw/include/c++/6.2.0/bits/stl_pair.h:369:5: note: 

Средняя часть сообщения также сообщает вам, как компилятор нашел их, потому что они включены в ваш operator< through: (чтение снизу вверх)

In file included from C:/Program Files/Haskell 
Platform/8.2.2/mingw/include/c++/6.2.0/bits/stl_algobase.h:64:0,
                 from C:/Program Files/Haskell 
Platform/8.2.2/mingw/include/c++/6.2.0/bits/char_traits.h:39,
                 from C:/Program Files/Haskell 
Platform/8.2.2/mingw/include/c++/6.2.0/ios:40,
                 from C:/Program Files/Haskell 
Platform/8.2.2/mingw/include/c++/6.2.0/ostream:38,
                 from C:/Program Files/Haskell 
Platform/8.2.2/mingw/include/c++/6.2.0/iostream:39,

Эти файлы по какой-то причине находятся в каталоге Haskell, вот и все.

Сообщения об ошибках в C ++ иногда длинные (особенно с шаблонами), но если вы научитесь внимательно их читать, у вас всегда должно быть достаточно информации для исправления кода или, по крайней мере, посмотрите, в чем проблема.