我上课class Pstring
{
private:
string palindrome;
public:
Pstring() { palindrome = ""; }
Pstring(string pal) { setString(pal); }
void setString(string pal) { palindrome = pal; }
string getPal() const { return palindrome; }
};
Pstring palindrome(palin)
由
定义的主方法 string palin = "";
cout << "Enter a palindrome:\n";
getline(cin, palin);
Pstring palindrome(palin);
中的对象
bool isPalindrome(string pal)
和当前测试方法bool isPalindrome(string pal)
{
bool flag;
cout << "Do I have access to this?";
cout << pal;
//code goes here to check for palindrome, return bool
}
定义为
palindrome.isPalinedrome(palin);
我希望我的Pstring类对象palindrome在main中使用方法isPalindrome,但是当我尝试使用c_id c_name status p_id created_at
1 john 1 79 2016-04-13 10:36:44
2 smith 1 79 2016-04-13 14:25:57
3 phil 1 76 2016-04-18 18:06:21
4 leo 1 76 2016-04-18 15:51:41
5 craig 1 79 2016-04-20 10:44:17
...
调用该方法时,它似乎无法访问该方法。
如果允许类外的方法被main中的类对象使用,我该怎么办?
答案 0 :(得分:1)
您没有在isPalinedrome()
课程中定义Pstring
方法,因此您无法在主代码中将其称为palindrome.isPalinedrome()
。
不应让Pstring
尝试在主代码中调用函数,而应将回文逻辑移至Pstring
,然后主代码可在需要时询问Pstring
。 / p>
试试这个:
class Pstring
{
private:
string value;
public:
Pstring() { }
Pstring(const string &s) { setString(s); }
void setString(const string &s) { value = s; }
string getString() const { return value; }
// add this...
bool isPalindrome() const {
//code goes here to check value for palindrome, return bool
}
};
然后您的主要代码可以执行此操作:
bool isPalindrome(const string &value)
{
Pstring palindrome(value);
return palindrome.isPalindrome();
// or simply:
// return Pstring(value).isPalindrome();
}
int main()
{
string palin;
cout << "Enter a palindrome:\n";
getline(cin, palin);
if (isPalindrome(palin)) {
// do something ...
} else {
// do something else...
}
return 0;
}
或者这个:
int main()
{
string palin;
cout << "Enter a palindrome:\n";
getline(cin, palin);
Pstring palindrome(palin);
if (palindrome.isPalindrome()) {
// do something ...
} else {
// do something else...
}
return 0;
}
答案 1 :(得分:1)
您应该将测试方法添加到课程中:
class Pstring
{
private:
string palindrome;
public:
// you don't need to initialize palindrome = "" (it's initialized by default)
Pstring() {}
// always pass strings as const reference unless you have
// special reason to do it another way...
Pstring(const string& pal) { setString(pal); }
void setString(const string& pal) { palindrome = pal; }
string getPal() const { return palindrome; }
bool isPalindrome() const // you don't have to pass string
{
bool flag;
cout << "Do I have access to this?";
cout << palindrome; // please note this
//code goes here to check for palindrome, return bool
}
};
还请注意错字: palindrome.isPalin的ë强>综合征(帕林);
答案 2 :(得分:0)
您可以使用函数指针来实现它:
宣布课程:
class Pstring{
private:
string palindrome;
public:
Pstring() { palindrome = ""; }
Pstring(string pal) { setString(pal); }
void setString(string pal) { palindrome = pal; }
string getPal() const { return palindrome; }
//add a function pointer member:
bool(*isPalindrome) (string);
};
然后定义函数:
bool isPalindrome(string pal)
{
bool flag;
cout << "Do I have access to this?";
cout << pal;
//code goes here to check for palindrome, return bool
return true;
}
现在你可以在main函数中编写代码:
string palin = "";
cout << "Enter a palindrome:\n";
getline(cin, palin);
Pstring palindrome(palin);
palindrome.isPalindrome = isPalindrome;//bind function
您现在可以使用该对象的功能:
palindrome.isPalindrome(palin);
答案 3 :(得分:0)
对不起。创建这门课的重点是什么?你唯一需要的是辅助函数isPalindrome(const std :: string&amp;)。如果您需要某种范围保护,将其放入命名空间可能看起来更好
很抱歉,但我不得不说你只是让事情变得复杂。
C ++不是java。如果你不使用它,你不应该付钱。