我无法理解标题中的问题。 所以有我的两个类,一个3个双精度矢量和一个2D动态矩阵,每个单元格中都有一个Vector对象。 Matrix的构造函数可以工作,不会抛出错误。但是,当我想在ostream重载中引用创建的Matrix实例的单元格时,我得到了
“'运算符[]'不匹配(操作数类型为'Matrix'和'int')”
为什么在初始化期间使用[] []表示法可以,以后不行? 是否有一种中等直接的方法来解决这个问题? 非常感谢!
class Vector{
private:
double x, y, z;
public:
Vector(){
x = y = z = 0;
}
Vector(int x_, int y_, int z_){
x = x_;
y = y_;
z = z_;
}
friend ostream &operator<< (ostream &wyj, Vector &v);
friend istream &operator>> (istream &wej, Vector &v);
};
/// ===== MATRIX CLASS CONSISTS OF VECTOR OBJECTS
class Matrix{
private:
Vector ** M;
int row;
int col;
public:
Matrix(int col, int row){
M = new Vector * [row];
for(int i = 0; i < row; i++){
M[i] = new Vector[col];
}
for(int i = 0; i < row; i++){
for(int j = 0; j < col; j++){
M[i][j] = Vector();
}
}
}
friend ostream &operator<< (ostream &wyj, Matrix &M);
};
ostream &operator<< (ostream &wyj, Matrix &M){
for(int i = 0; i < M.row; i++){
for(int j = 0; j < M.col; j++){
wyj << M[i][j] << " ";
}
wyj<< endl;
}
return wyj;
}
int main(){
Matrix A(2, 2);
cout << A[1][1]; // LURD VADAR SAYZ NOOOOOOOOOOOOOOO
}
编辑:&lt;&lt;&lt;&lt;&lt;&lt;&lt;&lt;过载方法
答案 0 :(得分:2)
为什么在初始化期间使用[] []表示法并不正常 以后?
在Matrix
的构造函数M
中是Vector**
。在main()
A
中有一个Matrix
。 [][]
Vector**
可以Matrix
,但[][]
没有意义(除非已定义)。
是否有一种中等直接的解决方法?
要使operator[]
工作,您需要定义operator[]
两次。一次为第一个对象,一次为第一个Matrix
返回的对象。
所以在Vector* operator[](size_t index) { return M[index]; }
你可以包括:
name1 score1;
name2 score2;
name3 score3;
import java.io.File;
import java.io.FileNotFoundException;
import java.lang.reflect.Array;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Scanner;
public class ReadData
{
public static void readData() throws FileNotFoundException
{
File file = new File("data.txt");
String[] names = new String[50];
int[] scores = new int[100];
Scanner scanner = new Scanner(file);
int l = 0;
int w = 0;
int z =0;
while (scanner.hasNextLine()) {
String line = scanner.nextLine();
String [] words = line.split("\t");
names[l] = words[0];
scores[l] = Integer.parseInt(words[1]);
//System.out.println(" name: " + names[l] + ", score: " + scores[l]);
//l++;
String line1 = scanner.nextLine();
String [] words1 = line1.split("\t");
names[w] = words1[0];
scores[w] = Integer.parseInt(words1[1]);
// w++;
String line2 = scanner.nextLine();
String [] words2 = line2.split("\t");
names[z] = words2[0];
scores[z] = Integer.parseInt(words2[1]);
//z++;
System.out.println(" name: " + names[l] + ", score: " + scores[l]);
System.out.println(" name: " + names[w] + ", score: " + scores[w]);
System.out.println(" name: " + names[z] + ", score: " + scores[z]);
}
}
}