【问题标题】:Using a simple class in c++, not working? [closed]在 C++ 中使用一个简单的类,不起作用? [关闭]
【发布时间】:2013-05-29 08:28:14
【问题描述】:

我发现了一个我想尝试的初学者 C++ 挑战。但是,以下代码表示我编译它时包含错误。如果我尝试一次取 1 行,它会在最后的第一类定义中退出......我不知道出了什么问题:)

#include <iostream>
using namespace std;

class Polynomial {
    int a, b, c, functionValue;

public:
    Polynomial (int, int, int);
    static void functionValue(Polynomial);
};

Polynomial::Polynomial (int x, int y, int z) {
    a = x;
    b = y;
    c = z;
}

void Polynomial::functionValue(Polynomial x) {
    for (int i = 0; i < 5; i++) {
        x.functionValue = x.a * pow(i, 2) + x.b * i + x.c;
        cout << "The value of the function for x = "
             << i << " is " << x.functionValue;
    }
}

int main () {
    Polynomial poly (2, 3, 5);
    Polynomial::functionValue(poly);

    system("pause");
    return 0;
}

我不知道为什么格式这么差。这是pastebin link.

(编辑:我的错,我编辑了之前的编辑并意外删除了这些 - BoBTFish)

编译器错误:

'Polynomial::functionValue' : redefinition; previous definition was 'data member' 'see declaration of 'Polynomial::functionValue'
'Polynomial::functionValue' : not a function' 'illegal reference to non-static member 'Polynomial::functionValue'

提前致谢。

【问题讨论】:

  • 那么编译器错误是什么?
  • 首先,您能否提供您遇到的错误?更容易看到错误是什么。另请在来源中指出错误所在。
  • @wizH 也许是因为您没有添加错误消息(我没有投反对票)。错误消息揭示了很多问题,并且大部分时间准确地指出了问题所在
  • 我昨天才重新开始编程,所以并没有真正进入循环......不过几分钟后添加了它......无论如何,我从你的答案中修复了初学者的错误。被介绍给社区并不是一个很好的方式......无论如何,谢谢!
  • @wizH:+1 因为问题本身就很好。即使错误信息指出了问题所在,如果没有经验,初学者也很难理解它们。

标签: c++ class


【解决方案1】:

你有 functionValue 作为变量和函数。

【讨论】:

    【解决方案2】:

    functionValue 以两种不同的方式使用两次,一次作为整数,另一次作为静态函数。

    【讨论】:

      【解决方案3】:

      functionValue 可以是任何成员或函数名。您应该重命名其中的任何一个。

      还有什么需要使函数静态化。

      【讨论】:

        【解决方案4】:

        原因是还有一个名为functionValue的变量。

        我建议您安装一个替代的 C/C++ 编译器 - Clang。 Clang 提供了有关可能出现错误的原因和位置的更多详细信息。

        例如,我使用Clang 编译了您的代码,它提供了以下信息。

        test.cc:10:17: error: redefinition of 'functionValue' as different kind of symbol
            static void functionValue(Polynomial);
                        ^
        test.cc:6:18: note: previous definition is here
            int a, b, c, functionValue;
                         ^
        test.cc:19:18: error: redefinition of 'functionValue' as different kind of symbol
        void Polynomial::functionValue(Polynomial x) {
                         ^
        test.cc:6:18: note: previous definition is here
            int a, b, c, functionValue;
        

        这些给出了可能的错误的准确位置。

        Clang 对初学者真的很有帮助。

        【讨论】:

        • 会调查的,谢谢 :)
        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2021-07-30
        • 1970-01-01
        • 2014-01-23
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多