J'ai vu this et je l'ai corrigé mon code:C de l'erreur avec l'opérateur = de unique_ptr en utilisant std :: move (nullptr)
int solutionChooser = m_configFile.getChosenSolution();
ISolution* currentSolution;
switch (solutionChooser)
{
case 1:
{
currentSolution = new Solution1());
break;
}
case 2:
{
currentSolution = new Solution2());
break;
}
case 3:
{
currentSolution = new Solution3());
break;
}
case 4:
{
currentSolution = new Solution4());
break;
}
default:
{
std::cout << "The specified solution does not exists\n";
return;
}
}
en utilisant unique_ptr
comme:
int solutionChooser = m_configFile.getChosenSolution();
std::unique_ptr<ISolution> currentSolution;
switch (solutionChooser)
{
case 1:
{
currentSolution.reset(new Solution1());
break;
}
case 2:
{
currentSolution.reset(new Solution2());
break;
}
case 3:
{
currentSolution.reset(new Solution3());
break;
}
case 4:
{
currentSolution.reset(new Solution4());
break;
}
default:
{
currentSolution = std::move(nullptr); // here is the error
std::cout << "The specified solution does not exists\n";
return;
}
}
et maintenant je je suis obtenir l'erreur ci-dessous:
error: no match for ‘operator=’ (operand types are ‘std::unique_ptr<ISolution>’ and ‘std::remove_reference<long int>::type {aka long int}’)
Je ISolution
comme interface et le SolutionX
sont des classes dérivées de ISolution
Comment résoudre ce problème? Qu'est-ce que je fais mal?
Supprimez simplement cette ligne du cas par défaut. Vous ne semblez pas en avoir besoin. – juanchopanza
Essayez d'utiliser 'currentSolution.reset (nullptr)'; l'erreur est que nullptr est (au moins sur Visual Studio) implicitement convertible en int, et int n'est pas un pointeur de n'importe quel type. alternatevly essaie de faire 'std :: move (nullptr) –
Creris
' move (nullptr) '? Hey, j'allais toujours utiliser ce 'nullptr'! –