我有一個保存學生數據的類。在存儲之前,如果有效或無效,將首先檢查ID。在重載操作符>>時,我調用validate_id函數。我已經宣佈它是朋友,但是編譯時,它說'validate_id was not declared in scope
。是因爲它的靜態功能嗎?未在範圍錯誤中聲明
#include <iostream>
#include <string>
#include <locale>
#include <utility>
#include <algorithm>
#include <stdexcept>
typedef std::pair<std::string, std::string> Name;
class Student {
public:
Student(){};
bool operator <(const Student& rhs) const {
return (id_ < rhs.id_);
}
friend std::ostream& operator <<(std::ostream& os, const Student& s);
friend std::istream& operator >>(std::istream& is, Student& s);
private:
std::string id_;
Name name_;
static bool validate_id(const std::string& id){
if(id.length() != 9 && id[0] != 'a')
return false;
for(size_t i = 1, sz = id.length(); i < sz; i++){
if(!isdigit(id[i]))
return false;
}
return true;
}
};
std::ostream& operator <<(std::ostream& os, const Student& s){
return os << s.id_ << " " << s.name_.first << " " << s.name_.second;
}
std::istream& operator >>(std::istream& is, Student& s){
is >> s.id_ >> s.name_.first >> s.name_.second;
if(!validate_id(s.id_)) // error here, says validate_id is not in scope
throw std::invalid_argument("invalid ID");
return is;
}
你缺少範圍解析運算符::因爲它是一個成員 – blade
謝謝,我添加了'Student :: validate_id'並且它現在編譯。 – XDProgrammer
這是一個很好的審查運算符重載在c + + http://stackoverflow.com/questions/4421706/operator-overloading – blade