Когда у меня есть следующий фрагмент кода:
#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, я уже уверен, что получил это право, и я не хочу, чтобы вопрос был еще дольше.
Это компилятор c ++, а не Haskell. Как отмечали другие в комментариях, нельзя указывать цикл (или любой исполняемый код в этом отношении) в определении класса.
Давайте попробуем разобраться второе сообщение об ошибке:
написав
std::cout < "Hello\n";
, вы сказали, что хотите сравнитьstd::cout
, который является объект сstd::ostream
(строка). Компилятор сказал вам, что не знает, как это сделать. Потому что формально вы запросили функциюconst char [7]
, но она не нашла ее.Но она нашла следующие две функции:
Компилятор подумал, что, возможно, вы хотели позвонить им, вы знаете, возможно, вы сделали опечатку или что-то. Компилятор также сказал вам, где они находятся:
Средняя часть сообщения также сообщает вам, как компилятор нашел их, потому что они включены в ваш
operator<
through: (чтение снизу вверх)Эти файлы по какой-то причине находятся в каталоге Haskell, вот и все.
Сообщения об ошибках в C ++ иногда длинные (особенно с шаблонами), но если вы научитесь внимательно их читать, у вас всегда должно быть достаточно информации для исправления кода или, по крайней мере, посмотрите, в чем проблема.