-1

コンパイルしようとするとエラーが発生し、何が問題なのかわかりません。これは、「;」で区切られたテキストファイルでユーザー名とパスワードを認証するプログラムです。単一のテキストファイルで区切ります。エラーはかなり長いです。

/tmp/ccgs7RYV.o: 関数 'Employee::Employee()' 内:
main2.cpp:(.text+0xa5): 'Employee::authenticate(std::basic_string, std::allocator>, std::basic_string, std::allocator>)' への未定義の参照
/tmp/ccgs7RYV.o: 関数 `Employee::Employee()' 内:
main2.cpp:(.text+0x231): 'Employee::authenticate(std::basic_string, std::allocator>, std::basic_string, std::allocator>)' への未定義の参照
collect2: ld が 1 つの終了ステータスを返しました
#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;
}
4

2 に答える 2

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;
}

スコープ解決演算子を使用する必要があります。あなたはそれを見逃していました。

于 2012-10-23T14:46:05.553 に答える
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";
    }
}
于 2012-10-23T15:11:21.243 に答える