【问题标题】:C++ error: expected primary-expression before '(' token [closed]C ++错误:'('标记之前的预期主表达式[关闭]
【发布时间】:2014-07-30 23:20:04
【问题描述】:

所以我知道我的代码是一团糟。我有一个关于操作员重载的逾期作业,我一直在惨败并试图让它发挥作用。

它的要点是:定义一个一元数类 Unary 到以下规范。

该类应该用全1来表示数字,例如11111代表5,1111111111代表10,空字符串代表0。我们必须这样做 > + - ++ & --(post and pre )。

好的。到目前为止,我只能让 > 和 + 运算符工作。所以我正在处理 - 现在我收到了这个错误:

100:17: error: expected primary-expression before '(' token
100:26: error: expected primary-expression before ')' token

我正在使用 g++。 这是我的代码。我用//@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@标记了第100行

#include <iostream>
#include <cstdlib>
#include <sstream>
using namespace std;
class Unary {
    friend ostream& operator<<(ostream& outputStream, const Unary& output);
    friend istream& operator>>(istream& inputStream, Unary& input);

public:
    Unary();
    ~Unary();
    Unary(int&);
    string toString();
    Unary operator+(const Unary&);
    Unary operator-();
    Unary& operator++();
    const Unary operator++(int);
    // Unary& operator--();
private:
    int x, myInt;
    string myString;
};

int main() {
    // variable for manipulating
    Unary uNum;
    Unary uNum2;
    Unary uNumAns;
    Unary uNumAns2;

    cout << "Please enter a number by representing it with 1's: ";
    cin >> uNum;
    cout << "uNum has " << uNum << ". " << endl;

    cout << "Please enter a number by representing it with 1's: ";
    cin >> uNum2;
    cout << "uNum2 has " << uNum2 << ". " << endl;

    uNumAns = uNum + uNum2;
    cout << "uNum (" << uNum << ") + uNum2 (" << uNum2 << ") = uNumAns ("
         << uNumAns << ") " << endl;

    cout << "uNumAns is " << uNumAns << endl;
    cout << "** After ++uNumAns, uNumAns is " << uNumAns << endl;

    //   cout << "uNumAns2 is " << uNumAns2 << endl;
    //   --uNumAns2;
    //   cout << "** After --uNumAns, uNumAns2 is " << uNumAns2 << endl;

    //   cout << "\nuNumAns before uNumAns++ is " << uNumAns;
    //   uNumAns++;
    //   cout << "uNumAns after uNumAns++ is " << uNumAns << endl;

    return 0;
}

// default constructor
Unary::Unary() : myInt(0) {}

Unary::Unary(int& newInt) : myInt(newInt) {
    myString = this->toString();
    cout << " in Unary(int) : myInt is " << myInt << "& myString is "
         << myString << endl;
}

// deconstructor
Unary::~Unary() {}

ostream& operator<<(ostream& outputStream, const Unary& output) {
    outputStream << output.myString;
    return outputStream;
}
istream& operator>>(istream& inputStream, Unary& input) {
    string str;
    inputStream >> str;
    input.myString = str;
    return inputStream;
}

Unary& Unary::operator++() {
    this->myString += 1;
    return *this;
}

// Unary& Unary::operator--() {
//     this->myString = myString - 1;
//     return *this;
// }

const Unary Unary::operator++(int post) {
    myInt = myString.length();
    Unary* answer = new Unary(myInt);
    myInt += 1;
    return *answer;
}
Unary Unary::operator-() {
    //     int newx = lhs.x - rhs.x;
    //     Unary *answer = new Unary(newx);
    myInt = myString.length();
    return Unary(-myInt&);  //@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ THIS IS LINE 100
}

Unary Unary::operator+(const Unary& rhs) {
    // myInt = this->myInt + rhs.toString();
    Unary* answer = new Unary;
    answer->myString = myString + rhs.myString;
    return *answer;
}

string Unary::toString() {
    string str = "";
    myInt = myString.length();
    cout << "\n (changing an int to a string) You entered " << myInt;
    for (int i = 0; i < myInt; i++) {
        str += "1";
    }
    myString = str;
    cout << " ** myString is " << myString << " ** " << endl;
    return str;
}

【问题讨论】:

  • 你应该看到第 100 行有一个明显的问题。
  • 我修好了。我认为这是我复制和粘贴时的意外。我仍然收到错误。
  • ...您至少可以告诉我们哪一行是 100,这样我们就不必查看您发布的所有不必要的代码了吗?
  • @Nat 哇,那个小&符号到底在做什么?这可能是导致问题的原因吗? /讽刺/
  • 您的operator+ 每次调用都会泄漏内存。

标签: c++ compiler-errors g++


【解决方案1】:

我认为你的意思是:

return Unary(-myInt&);

成为:

return Unary(-myInt);

& 是一个语法错误。

【讨论】:

  • -myInt 没有 & 就不能工作,因为一元需要一个 int&
  • @Nat,这不是引用的工作方式。
  • @Nat,这也会泄漏内存。首先,您的构造函数不应该引用int。然后,这只是变成return myString.length();
  • @Nat 它可以工作,但仍然存在问题。 Unary* answer = new Unary(myInt) 使用 new 分配内存。如果newdelete 不匹配,则会出现内存泄漏。最好只做Unary answer(myInt)。此外,由于Unary(int) 不是explicit,你可以继续做Unary Unary::operator-() { myInt = myString.length(); return myInt; }
  • @Nat 停止做 new 。你在代码中的任何地方都不需要它,它只会导致问题。
猜你喜欢
  • 1970-01-01
  • 2015-03-31
  • 2012-07-08
  • 2015-01-03
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多