我正在尝试在c ++ Concert技术中创建一个布尔矩阵。我已经定义了
typedef IloArray<IloBoolArray> BoolMatrix;
之后我宣布:BoolMatrix Assigned(env)
;但是在file >> Assigned
尝试输入数据时,它显示错误(没有运算符“&gt;&gt;”匹配这些操作数)。请帮我解决这个错误。
感谢
答案 0 :(得分:0)
大多数情况下,这意味着您忘记声明运营商“&gt;&gt;”在您正在使用的类或库类中传递参数类型不支持对这些参数的此类操作。你能在问题上更具体一点吗?
答案 1 :(得分:0)
错误告诉您的是编译器无法使用您提供的参数找到operator>>(Type1 LHS, Type2 RHS)
的任何定义。 Type1
可以是std::istream
,Type2
是BoolMatrix
。
为了允许您尝试执行的操作,您需要定义自己的operator<<
实现,它将获取您提供的类型,并对其进行操作。函数原型可能如下所示:
void operator<<(std::istream& file, BoolMatrix& matrix) {
// Read in the values from the stream and add them to matrix
}
此外,来自CPLEX Documentation,它说:
模板运算符&gt;&gt;可以从格式为[x,y,z,...]的文件中读取数值,其中x,y,z是运算符的结果&gt;&gt;对于类X.类X必须为运算符&gt;&gt;提供默认构造函数。上班。即,声明X x;必须适用于X.此输入操作符仅限于数值。
你有两个IloArrayX
数组,其中X是外部数组的bool数组,内部数组是bool
。您可以使用流从文件中读取bool,将它们添加到内部bool数组(IloBoolArray
),然后将内部IloBoolArray
添加到IloArray
。
此外,从我在网上找到的一些代码示例中,您似乎需要在添加到IloBoolArray
之前初始化每个typedef IloArray<IloBoolArray>> BoolMatrix;
static constexpr int totalRows = 8; // Total IloBoolArrays
static constexpr int rowElements = 4; // Total elements in each bool array
int main() {
// Create the bool Matrix
BoolMatrix Assigned(env);
bool streamInputVar; // Temp variable to read from stream
const char* inputFilename = "input.txt"; // File to get data from
std::ifstream inputFile(inputFileName, ios::in); // Try and open file
if (!inputFile)
// Error for failing to open file
// File open, so read stream into Matrix
for (int i = 0; i < totalRows; ++i) {
Assigned.add(IlBoolArray(env)); // Add an IloBoolArray to BoolMatrix
for (int j = 0; j < rowElements; ++j) {
if (!(inputFile >> streamInputVar)) // Check that the stream is okay
// Error for bad stream
else
Assigned[i].add(streamInputVar);
}
}
}
。
以下是我理解的工作示例(未经测试):
weavemesh