C++ 在其他标题C和x2B中使用cin+;

C++ 在其他标题C和x2B中使用cin+;,c++,header,cin,C++,Header,Cin,我想通过在我自己的头中使用从用户那里获得三个变量 这是我写的一段代码 <class T> Sparse<T>::Sparse(){ std::cout << "Please Enter The Following Information" << std::endl << "Row:" ; std::cin >> this->rows; std::cout << "Column:"

我想通过在我自己的头中使用从用户那里获得三个变量

这是我写的一段代码

<class T>
Sparse<T>::Sparse(){

    std::cout << "Please Enter The Following Information" << std::endl << "Row:" ;
    std::cin >> this->rows;
    std::cout << "Column:" << std::endl;
    std::cin >> this->column;
    std::cout << "Please Enter The Number of TermS:" << std::endl;
    std::cin >> this->term;

}
我遇到的问题是,正如您所看到的,类的函数没有循环,但是

当我运行代码时,编译器会多次运行此块。。。 就像cin不能初始化变量一样

像这样

  "Please Enter The Following Information"
  "Rows:"
  "Columns:"
  "Please Enter The Number of TermS:"
  "Please Enter The Following Information"
  "Rows:"
  "Columns:"
  "Please Enter The Number of TermS:"
请帮忙

额外细节

正如Coffin先生所说,我想使用“转发声明”,请帮助我。。。 我必须如何使用。。。 因为在另一个标题中包含标题是一种非常糟糕的样式

是的,我有两个构造函数,一个得到 另一个是这样工作的。。。。 这是因为我不想在我的主要部分有cin和cout以及大量的等式(=)。。。
谢谢科芬先生

类的构造函数用于对象的初始创建。在本例中,这是默认构造函数。通常,您可能不希望在类的构造函数中编写面向用户的问题,更不用说默认构造函数了

以您的方式编写意味着,无论何时创建未初始化的稀疏,都会向用户询问以下问题

Sparse<int> a, b;
其次,拥有一个与标准输入/输出对话的构造函数从根本上削弱了它的实用性。使用该逻辑从用户获取值没有问题,但如果将其放入类的构造函数中,则该类只能在具有标准输入/输出的应用程序中使用(gui和无头应用程序都不需要应用)

第三,你将如何处理错误?如果cin在第一个问题后关闭怎么办?您的代码没有检查它,如果它检查了,它将不得不将负担传递给创建对象的人。没有人希望必须写作

try {
    Object myObject; // may fail if user types 'wibble' instead of '13'.
} catch (wibble_input_as_columns_exception& e) {
    std::cerr << "Damnit, Dave, 'wibble' is not a valid number of columns." << std::endl;
}
试试看{
对象myObject;//如果用户键入“wibble”而不是“13”,则可能会失败。
}捕获(wibble\u输入\u作为\u列\u异常&e){

你能展示一个简短完整的例子吗?我怀疑构造函数下次会被调用。你能给我们展示一下代码吗?
cin
不是一个类。它是标准输入流的一个对象。为什么不
#include
?如果你想要一个ios东西的转发声明,不要尝试自己做。标准包括
标题正是为了这个目的;使用它。更好的设计是将
术语
传递给构造函数。这是一个很好的答案,除了回答
类cin
的突出问题,这是一个真正的问题。这是一个相当公平的观点,编辑。他不喜欢要问这个问题,他的问题是“我遇到的问题是,你可以看到,类的函数没有循环,但是……”。所以你是对的,他不需要“类cin”声明,这是错误的,但如果他做得好,他也不需要它。这是真的,在这种情况下op不需要它,但它仍然站在“就像cin不能初始化变量…”重复对它说话,就像op认为他们想要的,但“cin”不工作,这很容易回答;“不,
#include
。仅此而已:)是的,我几乎就是这么写的-编辑没有立即为我显示出来,也许是因为有一些问题。
Sparse<int> a, b;

if (day == "Monday") {
    a.something();
} else {
    b = a;
}
std::vector<Sparse<int>> manySparses;
manySparses.resize(1000);
Sparse<int> a, b;
a.GetConstraints();
if (day == "Monday")
    b.GetConstraints();
else
    b = a;
#include <iostream>
class string {
public:
    string() {
        std::cout << "Enter the string you want: ";
        std::cin >> m_string;
        m_length = strlen(m_string);
    }
    ...
};
class string {
public:
    string() : m_string(NULL), m_length(0) {}
    ...
};
try {
    Object myObject; // may fail if user types 'wibble' instead of '13'.
} catch (wibble_input_as_columns_exception& e) {
    std::cerr << "Damnit, Dave, 'wibble' is not a valid number of columns." << std::endl;
}