0

以下の関数をクラスに追加しようとしています

vector<string> &split(const string &s, char delim, vector<string> &elems) {

    stringstream ss(s);

    string item;

    while(getline(ss, item, delim)) {

        elems.push_back(item);

    }

    return elems;

}



vector<string> split(const string &s, char delim) {

    vector<string> elems;

    return split(s, delim, elems);

}

以下は私のクラスファイルです

#ifndef LOGIN_H  
#define LOGIN_H

#include <string>
#include <fstream>
#include <sstream>
#include <vector>
#include <iostream>

using namespace std;


    class Login
    {

    private:
    ifstream infile;
    string sLine,username,password;
    stringstream ss;
    int counter,logCounter;
    bool verify,end;

    public:
    Login();
    Login(string,string);
    bool loginValidate(string,string);
    };

    Login::Login()
    {

    }

    Login::Login(string user,string pass)
    {
    username=user;
    password=pass;
    }





    bool Login::loginValidate(string user,string pass)
    {
    bool result,verify;
    result=false;


    /* Begin Read account File */
    infile.open("account.txt");

    if(infile.is_open())
    {
    while (infile.good())
    {
    getline(infile, sLine);

    if(sLine!="")
    {
    //do vector split
    vector<string> x = split(sLine,':');




    x.clear();

    }//end if sLine


    }//end while loop
    }//end if

    infile.close();

    return result;

    }//end function loginValidate



    #endif

loginのloginValidate関数でsplit関数を使用しようとしています-LoginClassですが、上記のlogin validateで宣言しようとすると、次のようなエラーが発生します。

 user1@ubuntu:~/yes222/New folder$ g++ test.cpp login.cpp -o main
    /tmp/ccv6uiN1.o: In function `split(std::basic_string<char, std::char_traits<char>, std::allocator<char> > const&, char, std::vector<std::basic_string<char, std::char_traits<char>, std::allocator<char> >, std::allocator<std::basic_string<char, std::char_traits<char>, std::allocator<char> > > >&)':
    login.cpp:(.text+0x0): multiple definition of `split(std::basic_string<char, std::char_traits<char>, std::allocator<char> > const&, char, std::vector<std::basic_string<char, std::char_traits<char>, std::allocator<char> >, std::allocator<std::basic_string<char, std::char_traits<char>, std::allocator<char> > > >&)'
    /tmp/ccCcz7T2.o:test.cpp:(.text+0x0): first defined here
    /tmp/ccv6uiN1.o: In function `split(std::basic_string<char, std::char_traits<char>, std::allocator<char> > const&, char)':
    login.cpp:(.text+0xe9): multiple definition of `split(std::basic_string<char, std::char_traits<char>, std::allocator<char> > const&, char)'
    /tmp/ccCcz7T2.o:test.cpp:(.text+0xe9): first defined here
    collect2: ld returned 1 exit status
    user1@ubuntu:~/yes222/New folder$ g++ test.cpp login.cpp -o main
    login.cpp: In member function ‘bool Login::loginValidate(std::string, std::string)’:

誰かが私を導くことができますか?ありがとう!

以前はメインクラスですべてを使用していた関数ですが、ログイン部分を別のクラスに分割しようとすると、そのクラスでこの関数を使用する際に問題が発生しました。

4

2 に答える 2

1

login.h

#ifndef __LOGIN__
#define __LOGIN__

#include <fstream>
#include <sstream>
#include <iostream>
#include <vector>
#include <string>

class Login
{

    private:
        std::ifstream       infile;
        std::string         sLine,username,password;
        std::stringstream   ss;
        int                 counter,logCounter;
        bool                verify,end;

    public:
                                    Login(void);
                                    Login(std::string, std::string);
        bool                        loginValidate(std::string, std::string);
        std::vector<std::string>    split(const std::string& s, char delim);
        std::vector<std::string>&   split(const std::string& s, char delim, std::vector<std::string>& elems);
};

#endif

login.cpp

#include <login.h>

Login::Login(void)
{

}

Login::Login(std::string user, std::string pass)
{
    username = user;
    password = pass;
}

bool
Login::loginValidate(std::string user, std::string pass)
{
    bool    result,verify;

    result = false;
    infile.open("account.txt");
    if (infile.is_open())
    {
        while (infile.good())
        {
            getline(infile, sLine);
            if (sLine != "")
            {
                std::vector<std::string> x = split(sLine,':');
                x.clear();
            }
        }
    }
    infile.close();
    return result;

}

std::vector<std::string>&
Login::split(const std::string& s, char delim, std::vector<std::string>& elems)
{
    std::stringstream   ss(s);
    std::string         item;

    while (getline(ss, item, delim))
        elems.push_back(item);
    return elems;
}



std::vector<std::string>
Login::split(const std::string& s, char delim)
{
    std::vector<std::string>    elems;

    return split(s, delim, elems);
}
于 2013-02-05T16:52:36.040 に答える
0

これは、この関数をソースではなくヘッダーで定義するために発生します。関数の定義をインラインに移動するcpp 、インラインでマークします

于 2013-02-05T14:58:56.080 に答える