我試圖撰寫一個井字游戲只是為了好玩,當我嘗試除錯應用程式時遇到了這個錯誤。錯誤發生在第 23 行,即多維 std::array 宣告。我找不到有關該主題的任何材料或想出自己的解決方案。該錯誤顯示在 VS 2019 的“未找到源”選項卡中,看起來不像是正常錯誤,這是文本:“未找到預定義的 C 型別(編譯器內部) 您需要找到預定義的 C 型別(編譯器內部)查看當前呼叫堆疊幀的來源。”
#include <io.h>
#include <fcntl.h>
#include <iostream>
#include <algorithm>
#include <array>
#include <string>
class tic_tac_toe
{
private:
enum class values
{
X,
O,
max_values
};
struct square_data
{
std::string code{};
values value{};
};
std::array<std::array <square_data, 3>, 3> board{};
public:
tic_tac_toe()
{
for (int a{ 0 }; a < 3; a)
{
for (int b{ 0 }; b < 3; b) {
switch (a)
{
case 0:
board.at(a).at(b).code = "A";
board.at(a).at(b).value = values::max_values;
break;
case 1:
board.at(a).at(b).code = "B";
board.at(a).at(b).value = values::max_values;
break;
case 2:
board.at(a).at(b).code = "C";
board.at(a).at(b).value = values::max_values;
break;
default:
std::cout << "initializer failed\n"; //shouldn't happen
}
board.at(a).at(b).code.append(std::to_string((b 1)));
}
}
print_grid();
}
void print_code(square_data square)
{
switch (square.value)
{
case values::X:
std::wcout << L"X";
break;
case values::O:
std::wcout << L"O";
break;
default:
std::wcout << L" ";
}
}
void print_grid()
{
fflush(stdout);
int previous{ _setmode(_fileno(stdout), _O_U16TEXT) }; //print unicode
for (int a{ 0 }; a < 3; a)
{
switch (a)
{
case 0:
std::wcout << L"\n┌───┬───┬───┐\n│ ";
break;
case 1:
std::wcout << L"\n├───┼───┼───┤\n│ ";
break;
case 2:
std::wcout << L"\n├───┼───┼───┤\n│ ";
break;
default:
std::cout << "printer failed\n";
}
for (int b{ 0 }; b < 3; b) {
print_code(board.at(a).at(b));
std::wcout << L" │ ";
}
}
std::wcout << L"\n└───┴───┴───┘\n";
fflush(stdout);
_setmode(_fileno(stdout), previous); //for switching back to narrow output
}
};
int main()
{
tic_tac_toe game{};
return 0;
}
uj5u.com熱心網友回復:
這是VS的錯誤。當我洗掉 /permissive- 時它起作用。此問題已被報告。
轉載請註明出處,本文鏈接:https://www.uj5u.com/net/335369.html
