C++ 为什么不打印字符串?C++; #包括 使用名称空间std; 模板 类数组{ 公众: tu[10]; 友元无效数据输出(数组); 获取数据(数组); }; 无效数据输出(数组数组1){ cout>Array1.U[0]; cin.clear(); } int main(){ 阵列Arr1; GetData(Arr1); 数据输出(Arr1); }

C++ 为什么不打印字符串?C++; #包括 使用名称空间std; 模板 类数组{ 公众: tu[10]; 友元无效数据输出(数组); 获取数据(数组); }; 无效数据输出(数组数组1){ cout>Array1.U[0]; cin.clear(); } int main(){ 阵列Arr1; GetData(Arr1); 数据输出(Arr1); },c++,string,C++,String,我制作了一个类模板并创建了两个函数:GetData用于输入字符串和DataOut用于打印该字符串,但在输入字符串后它不会打印该字符串。我做错了什么?我把评论放在我所做更改的地方。主要修复方法是通过引用传递对象,特别是传递到Getdata()。您传递了一个副本,将数据放入副本,当函数结束时,副本消失,您的原始对象从未被触碰过 #包括 使用名称空间std; 模板 类数组{ 公众: tu[10]; 朋友无效数据输出( 常量数组&);//已更改:需要通过引用获取对象 friend void GetDat

我制作了一个类模板并创建了两个函数:
GetData
用于输入字符串和
DataOut
用于打印该字符串,但在输入字符串后它不会打印该字符串。我做错了什么?

我把评论放在我所做更改的地方。主要修复方法是通过引用传递对象,特别是传递到
Getdata()
。您传递了一个副本,将数据放入副本,当函数结束时,副本消失,您的原始对象从未被触碰过

#包括
使用名称空间std;
模板
类数组{
公众:
tu[10];
朋友无效数据输出(
常量数组&);//已更改:需要通过引用获取对象
friend void GetData(数组&);//相同
};
无效数据输出(常量数组和数组1){//相同
cout>Array1.U[0];
//cin.clear();//更改:为什么?
}
int main(){
阵列Arr1;
Getdata(Arr1);
数据输出(Arr1);
}

按值传递,而不是按引用传递。如中所示,您正在做什么与您应该做什么。这可能是因为您正在将变量
Arr1
的副本传递到
Getdata
中,而不是对它的引用。但是如何使用引用呢?这是子问题的答案。为什么?当然要清除流中留下的数据!否则为什么要调用名为
clear
的函数?清除错误标志?@user4581301:清除错误标志就是它的作用,如果你想清除剩余的数据,而这些数据将被
忽略
,这似乎是不必要的,这正是我想要的。我知道它的作用。
#include <iostream>

using namespace std;

template<class T>
class Array{
public:
    T U[10];

    friend void DataOut(Array<string>);
    friend void GetData(Array<string>);
};

void DataOut(Array<string> Array1){
    cout << Array1.U[0];
}

void GetData(Array<string> Array1){
    cin >> Array1.U[0];
    cin.clear();
}

int main(){
    Array<string> Arr1;
    GetData(Arr1);
    DataOut(Arr1);
}