在C ++中未定义Getting方法

时间:2017-04-10 22:46:08

标签: c++ undefined-function

我正在尝试从C ++教程创建程序。但导师使用的IDE是VS2010,而我正在使用VS2017。我注意到一些语法(sp。)略有不同。我不确定这个错误是什么,我尝试过搜索。

这是主要的.cpp:

    #include "stdafx.h"
    #include <iostream>
    #include "Utility.h"

    using namespace std;

    int main()
    {
        int x;
        cout << "Enter a Number: " << endl;
        cin >> x;

        if (IsPrime(x))
            cout << x << " is prime" << endl;
        else
            cout << x << " is not prime" << endl;

        if (Is2MorePrime(x))
            cout << x << "+2 is prime" << endl;
        else
            cout << x << "+2 is not prime" << endl;


        return 0;
    }

在if条件下测试的方法都返回“包含的方法:未找到标识符”和“包含的方法:标识符未定义”

这是包含的类.cpp:

    #include "stdafx.h"
    #include "Utility.h"
    #include <iostream>

    using namespace std;


    bool Utility::IsPrime(int num)
    {
    bool prime = true;
        for (int i = 0; i <= num / i; i++)
        {
            int factor = num / i;
            if (factor*i == num)
            {
                cout << "Factor Found: " << factor << endl;
                prime = false;
                break;
            }
        }

        return prime;
    }

    bool Utility::Is2MorePrime(int num)
    {
        num += 2;
        return IsPrime(num);
    }

这是包含的头文件:

    #pragma once

    class Utility
    {
        bool IsPrime(int primeNum);

        bool Is2MorePrime(int morePrime);
    };

我还是C ++编程的新手,所以我不知道任何密集的东西。

1 个答案:

答案 0 :(得分:0)

这些方法在Utility类中,但是您从main调用它们而没有Utility的实例,因此编译器/链接器正在寻找不存在的方法。 / p>

您可以将它们设为Utility的静态成员,然后您只需要调整范围(例如Utility::IsPrime(x)),而不是实际拥有Utility的实例。

如@Amadeus在评论中所提到的:如果Utility中的所有内容都是“无状态”并且可以是静态的,那么也许您应该将所有Utility方法放在命名空间而不是类中。