j'ai un problème avec ce code:C++ std :: ifstream dans le problème du constructeur
#include <fstream>
struct A
{
A(std::ifstream input)
{
//some actions
}
};
int main()
{
std::ifstream input("somefile.xxx");
while (input.good())
{
A(input);
}
return 0;
}
G ++ me sorties ceci:
$ g++ file.cpp
file.cpp: In function `int main()':
file.cpp:17: error: no matching function for call to `A::A()'
file.cpp:4: note: candidates are: A::A(const A&)
file.cpp:6: note: A::A(std::ifstream)
Après avoir changé à cela, il compiler (mais ne résout pas le problème):
#include <fstream>
struct A
{
A(int a)
{
//some actions
}
};
int main()
{
std::ifstream input("dane.dat");
while (input.good())
{
A(5);
}
return 0;
}
Quelqu'un peut-il m'expliquer ce qui ne va pas et comment le réparer? Merci.
Est-ce que A (entrée) ne construit pas un objet A temporaire? –
@Martin Les parenthèses autour de 'input' sont les parenthèses de liaison utilisées dans les déclarateurs, par exemple comme elles apparaissent dans' void (* p)(); 'autour de' * p'.Ceux autour de 'input' sont redondants. C'est ce que les gens expérimentent parfois dans le vecteur p (istream_iterator (cin), ...); ', où des parenthèses redondantes sont spécifiées autour de' cin'. –
J'ai oublié de mentionner que j'ai essayé cette chose avec des références. (A (entrée)) était bug, merci. – darvan