2017-04-10 70 views
0

我試圖創建一個從C++教程的程序。但是導師使用的IDE是VS2010,而我正在使用VS2017。我注意到一些語法(sp。)略有不同。我不確定這個錯誤是什麼,我試過搜索。獲取方法是不明確的C++

這裏的主要的.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; 
    } 

在如果條件被測試出的方法都返回一個「包括方法:標識符未找到」和「包括方法:標識符未定義「

下面是包括類的.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

因爲'main'調用'IsPrime'你得到一個錯誤,但沒有這樣的功能 - 只有'實用:: IsPrime'。你正在創建一個「Utility」類,你不需要它。 「IsPrime」和「Is2MorePrime」應該只是頭文件中定義的函數,並在.cpp中實現。 – jwimberley

+3

您正在使用一個類作爲名稱空間。 – tadman

回答

0

該方法在Utility類中,但是您從main調用它們時沒有Utility的實例,所以編譯器/鏈接器正在尋找不存在的方法。

你或許可以讓它們成爲Utility的靜態成員,然後你只需要調用調用範圍(例如Utility::IsPrime(x))而不是實際上有Utility的實例。

正如@Amadeus在評論中提到的那樣:如果Utility中的所有內容都是「無狀態的」並且可以是靜態的,那麼也許您應該將所有的實用方法放在名稱空間而不是類中。

+0

非常感謝John3136。我提出的方法在頭文件中靜態的(例如'靜態布爾IsPrime(INT X)')和作用域(例如'如果(實用:: IsPrime(X))')像你說的呼籲和它的工作。 –