私は、埋め込み式で代数式を取り、修正後の記法に変換して解決することが1つの機能であるC++プロジェクトに取り組んでいます。ポストフィックスへの変換が適切に機能し、修正後の式を評価するコードが意図したとおりに機能すると思われますが、エラーC2280のためコンパイルできません。ここでは接尾評価のためのコードは、(私は誰もが、彼らが、これはおそらく、どのように貧しい見たときに、それが動脈瘤を持っていることを経験したC++に非常に新しいです)です:C++エラーC2280:削除された関数を参照しようとしています
string EvaluatePostfix(string expression) {
double num;
double leftOp;
double rightOp;
string leftOpString;
string rightOpString;
stringstream numberToPush;
double tempResult;
string tempResultString;
stringstream tempResultSS;
stack<stringstream> S;
string finalResultString;
for (std::size_t i = 0, l = expression.size(); i < l; ++i) {
if (expression[i] == '=')
break;
else if (isalnum(expression[i])) { //If the first character is alphanumeric, get ready to push to stack.
while (expression[i] != ' ') { //Wait until hitting space to ensure entire number is pushed, not just 1 digit
numberToPush << expression[i];
i++;
}
S.push(numberToPush);
}
else if (IsOperator(expression[i])) { //When an operator is hit, top two strings are taken from stack and converted to double.
switch (expression[i]) { //Operation is applied, they are converted back to string and result is pushed onto stack
case '+':
leftOpString == S.top().str();
S.pop();
rightOpString == S.top().str();
S.pop();
leftOp = atof(leftOpString.c_str());
rightOp = atof(rightOpString.c_str());
tempResult = leftOp + rightOp;
tempResultString = to_string(tempResult);
for (int i = 0; i < tempResultString.length() - 1; i++) {
tempResultSS << tempResultString.at(i);
}
S.push(tempResultSS);
break;
case '-':
leftOpString == S.top().str();
S.pop();
rightOpString == S.top().str();
S.pop();
leftOp = atof(leftOpString.c_str());
rightOp = atof(rightOpString.c_str());
tempResult = leftOp - rightOp;
tempResultString = to_string(tempResult);
for (int i = 0; i < tempResultString.length() - 1; i++) {
tempResultSS << tempResultString.at(i);
}
S.push(tempResultSS);
break;
case '*':
leftOpString == S.top().str();
S.pop();
rightOpString == S.top().str();
S.pop();
leftOp = atof(leftOpString.c_str());
rightOp = atof(rightOpString.c_str());
tempResult = leftOp * rightOp;
tempResultString = to_string(tempResult);
for (int i = 0; i < tempResultString.length() - 1; i++) {
tempResultSS << tempResultString.at(i);
}
S.push(tempResultSS);
break;
case '/':
leftOpString == S.top().str();
S.pop();
rightOpString == S.top().str();
S.pop();
leftOp = atof(leftOpString.c_str());
rightOp = atof(rightOpString.c_str());
tempResult = leftOp/rightOp;
tempResultString = to_string(tempResult);
for (int i = 0; i < tempResultString.length() - 1; i++) {
tempResultSS << tempResultString.at(i);
}
S.push(tempResultSS);
break;
case '^':
leftOpString == S.top().str();
S.pop();
rightOpString == S.top().str();
S.pop();
leftOp = atof(leftOpString.c_str());
rightOp = atof(rightOpString.c_str());
tempResult = pow(leftOp, rightOp);
tempResultString = to_string(tempResult);
for (int i = 0; i < tempResultString.length() - 1; i++) {
tempResultSS << tempResultString.at(i);
}
S.push(tempResultSS);
break;
}
}
}
finalResultString == S.top().str();
return finalResultString;
}
ここでは全体のエラーメッセージは次のとおりです。
Error C2280 'std::basic_stringstream<char,std::char_traits<char>,std::allocator<char>>::basic_stringstream(const std::basic_stringstream<char,std::char_traits<char>,std::allocator<char>> &)': attempting to reference a deleted function ConsoleApplication2 c:\program files (x86)\microsoft visual studio 14.0\vc\include\xmemory0 737
そして、ここでは、それはエラーがあるという行を含む行733-738、以下のとおりです。
template<class _Objty,
class... _Types>
void construct(_Objty *_Ptr, _Types&&... _Args)
{ // construct _Objty(_Types...) at _Ptr
::new ((void *)_Ptr) _Objty(_STD forward<_Types>(_Args)...);
}
は誰が正しい方向towarに私を指すことができれば、私はそれを大幅に感謝これを修正する。
*あなたのコードのどの行が停止していますか?呼び出しスタックを見て、最終的にこの関数を呼び出すプログラムの行を確認してください。 – PaulMcKenzie
@PaulMcKenzieこれはコンパイラエラーではありませんか? – Barmar
でも、ある時点のエラーメッセージには、最終的にその関数を呼び出すコード行が表示されます。 – PaulMcKenzie