2012-10-23 22 views
-1

有一个错误,当我尝试编译和即时消息不知道它有什么问题。 这是一个使用文本文件来验证用户名和密码的程序,用“;”分隔一个文本文件中的分隔符。 错误很长。有身份验证问题,如果我使用if语句

 
/tmp/ccgs7RYV.o: In function 'Employee::Employee()': 
main2.cpp:(.text+0xa5): undefined reference to 'Employee::authenticate(std::basic_string, std::allocator>, std::basic_string, std::allocator>)' 
/tmp/ccgs7RYV.o: In function `Employee::Employee()': 
main2.cpp:(.text+0x231): undefined reference to 'Employee::authenticate(std::basic_string, std::allocator>, std::basic_string, std::allocator>)' 
collect2: ld returned 1 exit status 
#include<iostream> 
#include<string> 
#include <fstream> 

using namespace std; 

class Employee 
{ 
public: 
Employee(); 
bool authenticate(string, string); 
}; 

Employee::Employee() 
{ 
    string username, password; 
    cout << "Username: "; 
    cin >> username; 

    cout << "Password: "; 
    cin >> password; 

    if (authenticate(username, password) == true) 
     cout << "Sucess" << endl; 
    else 
     cout << "fail" << endl; 
} 

bool authenticate(string username, string password) 
{ 
    std::ifstream file("login.txt"); 
    std::string fusername, fpassword; 

    while (!file.fail()) 
    { 
     std::getline(file, fusername, ';'); // use ; as delimiter 
     std::getline(file, fpassword); // use line end as delimiter 
     // remember - delimiter readed from input but not added to output 

     if (fusername == username && fpassword == password) 
      return true; 
    } 

    return false; 
} 


int main() 
{ 
    Employee(); 
    return 0; 
} 
+0

请1)停止使用[功课]标签,它说在说明停止使用2)开始与你在编写编程语言标记您的问题。 – BoltClock

+0

你while循环已基本破坏。你不需要'fail()',但是你必须检查'getline'的返回值。 –

+0

类并不是真的被设计为像构造函数中的所有逻辑一样被作为临时对象调用。 为什么不把Employee作为一个对象,然后给它一个方法进行验证,该方法需要输入文件? – CashCow

回答

4
bool Employee::authenticate(string username, string password) { 
std::ifstream file("login.txt"); 
std::string fusername, fpassword; 

while (!file.fail()) { 
    std::getline(file, fusername, ';'); // use ; as delimiter 
    std::getline(file, fpassword); // use line end as delimiter 
    // remember - delimiter readed from input but not added to output 
    if (fusername == username && fpassword == password) 
     return true; 
} 

您需要使用范围解析操作。你只是想念那个。

+0

omg不能想象它的一个愚蠢的错误:(,谢谢指出它!) –

+0

它发生在我们身上。记得接受:P(以及您的其他问题) –

1

好吧,我将尝试梳理一下课程设计。

class Employee 
{ 
public: 
     Employee(std::string name, std::string password) : 
      m_name(name), m_password(password) 
     { 
     } 

     bool authenticate(const char * filename) const; 

private: 
     std::string m_name; 
     std::string m_password; 
}; 

Employee readEmployeeFromConsole() 
{ 
     std::string name, password; 
    std::cout << "Name: "; 
    std::cin >> name; 
    std::cout << "Password: " 
    std::cin >> password; 
    return Employee(name, password); 
} 

bool Employee::authenticate(const char * filename) const 
{ 
     // your implementation 
} 

int main() 
{ 
    Employee emp = readEmployeeFromConsole(); 
    if(emp.authenticate("input.txt")) 
    { 
     std::cout << "You're in!\n"; 
    } 
    else 
    { 
     std::cout << "Get out!\n"; 
    } 
} 
+0

thx代码:) –