我似乎无法弄清楚我做错了什么......我正在编写一个程序来玩游戏quatro,这是一种类似于tic tac tow的棋盘游戏。在游戏中他们是16件独特的作品,每件作品都有四个“特征”。 (高或短,黑色或白色,空心或填充,方形或圆形)
我创建了一个结构“片段”,其中“traits”是一个成员。我将特征称为W为白色,T为高,H或空心....
无论如何,我只是想创建一个包含所有可用部分的数组,并将它们显示在一个单独的按比例缩小的程序中。但是我似乎无法打印出可用数组的元素。
我得到的错误是
错误:与'operator<<'不匹配在std:cout<<可用的[0]'
这是我现在正在尝试的......
#include <iostream>
#include <iomanip>
#include <string>
#include <stdio.h>
#include <ctype.h>
#include <string.h>
#include <algorithm>
using namespace std;
struct Pieces{
string traits;
};
int main()
{
Pieces p1;
p1.traits = "WSHR";
Pieces p2;
p2.traits = "BSHR";
Pieces p3;
p3.traits = "WTHR";
Pieces p4;
p4.traits = "BTHR";
Pieces available [4] = {p1.traits,p2.traits,p3.traits,p4.traits};
cout << available[0];
return 0;
}
我添加了一堆库,希望这是问题所在。当我取消引用可用的数组(&amp; available [0])时,地址打印出来,但我似乎无法弄清楚如何在数组的第一个插槽中打印该值。
非常感谢任何帮助。
答案 0 :(得分:1)
错误:不匹配&#39;运营商&lt;&lt;&lt;&#39;在std:cout&lt;&lt;可用的[0]&#39;
您必须定义std::ostream& operator(std::ostream&, const Pieces&)
运算符才能直接打印Pieces
:
std::ostream& operator(std::ostream& os, const Pieces& pcs) {
os << pcs.traits;
return os;
}
或者,您只需直接从traits
输出struct Pieces
成员:
std::cout << available[0].traits;
答案 1 :(得分:1)
因为数组available
包含Pieces
类型的对象,而cout << available[0]
您尝试将Pieces
对象传递给operator<<
{ {1}}。
但std::cout
类型的cout::operator<<
并未超载,因此它不知道该怎么做。
重载Pieces
[1] 或者只是输出该结构中的字符串:
operator<<
[1] 请参阅πάντα ῥεῖ的答案。
答案 2 :(得分:-1)
您应该重载'&lt;&lt;&lt;'运算符(输出流运算符),或输出'traits'成员。此外,您可以使用自定义构造函数使它们更容易初始化,甚至使用std :: vector容器:
#include <iostream>
#include <string>
#include <vector>
using namespace std;
struct Pieces{
Pieces(){} // default c'tor
Pieces(const string& t)
: traits(t) {}
string traits;
friend ostream& operator<< (ostream& stream, const Pieces& p);
};
// overload the output stream operator for convenience
ostream& operator<< (ostream& stream, const Pieces& p)
{
stream << p.traits;
return stream;
}
int main()
{
Pieces p1("WSHR"); // neater if you write a constructor overload that inits the contents
Pieces p2("BSHR");
Pieces p3("WTHR");
Pieces p4("BTHR");
Pieces available[4] = { p1, p2, p3, p4 };
// Or you could init the elements directly in the array;
Pieces a2[1] = { Pieces("WSHR") };
cout << available[0] << endl;
// This is my favorite way to declare and init the array
vector<Pieces> avail = { Pieces("WSHR"), Pieces("BSHR"), Pieces("WTHR"), Pieces("BTHR") };
cout << avail[0] << endl;
}