获取方法在 C++ 中未定义
Getting method is undefined in C++
我正在尝试根据 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 条件下测试的方法都返回“包含的方法:未找到标识符”和“包含的方法 : 标识符未定义
这是包含的 class.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++ 编程的新手,所以我还不知道任何深入的知识。
这些方法在 Utility
class 中,但您是从 main
调用它们而没有 Utility
的实例,因此 compiler/linker 正在寻找不存在的方法。
您可以使它们成为 Utility
的静态成员,然后您只需要确定调用的范围(例如 Utility::IsPrime(x)
)并且实际上没有 Utility
的实例。
正如@Amadeus 在评论中提到的:如果 Utility
中的所有内容都是 "stateless" 并且可以是静态的,那么也许您应该将所有 Utility 方法放在命名空间中而不是 class.
我正在尝试根据 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 条件下测试的方法都返回“包含的方法:未找到标识符”和“包含的方法 : 标识符未定义
这是包含的 class.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++ 编程的新手,所以我还不知道任何深入的知识。
这些方法在 Utility
class 中,但您是从 main
调用它们而没有 Utility
的实例,因此 compiler/linker 正在寻找不存在的方法。
您可以使它们成为 Utility
的静态成员,然后您只需要确定调用的范围(例如 Utility::IsPrime(x)
)并且实际上没有 Utility
的实例。
正如@Amadeus 在评论中提到的:如果 Utility
中的所有内容都是 "stateless" 并且可以是静态的,那么也许您应该将所有 Utility 方法放在命名空间中而不是 class.