【问题标题】:Cannot correctly print integers that are returned from a function in C++无法正确打印从 C++ 中的函数返回的整数
【发布时间】:2015-09-23 21:49:58
【问题描述】:

我正在尝试为一个类编写一些程序,该类涉及使用Token 类创建一个对象并将其打印出来。这是我的主要方法:

int main(int argc, char** argv) {

    Token tok(10, "test", 1, 2);

    printf("%d\n", tok.type());
}

这是我的Token.cc 文件及相关方法:

Token::Token(int t, string str, int l, int c) {
    int tokType = t;

    string lexStr = str;

    int lineNum = l;

    int charPos = c;
}

int Token::type() {
    return tokType;
}

这是我的Token.h 文件:

#ifndef TOKEN_H
#define TOKEN_H

using namespace std;
#include <string>

class Token{
private:

public:

    Token(int t, string str, int l, int c);
    ~Token();

    int type();

    int tokType;
    string lexStr;
    int lineNum;
    int charPos;
};

#endif

程序编译得很好,但是当我运行它时,它会打印一个看似随机的数字,例如 1475212264-258154088 或该长度的其他一些随机数。

有什么想法可能会出错吗?这让我发疯了。

谢谢

【问题讨论】:

标签: c++ methods


【解决方案1】:

我相信在您的构造函数中,因为您重新定义了所有变量,所以您将它们的范围限制在构造函数中。这也意味着 Token 类的成员变量最终没有设置为您传递给构造函数的值。因此,由于 type(),您最终会得到未初始化的数据。

只需尝试像这样删除构造函数中的数据类型:

Token::Token(int t, string str, int l, int c) {
    tokType = t;

    lexStr = str;

    lineNum = l;

    charPos = c;
}

看看是否有帮助。

【讨论】:

  • 正确的方法是初始化构造函数初始化列表中的数据成员。
  • @juanchopanza 是对的。 knkp,你离得到一个既正确又好的答案只有一步之遥。现在是正确的。
  • 这是一个很好的答案。它将解决问题。不是最好的编码风格,但又一次作者已经在使用 printf 所以也许这是另一天的教训。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2022-01-15
  • 1970-01-01
  • 2012-11-03
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多