0

私はC++を初めて使用しますが、基本的な質問があります。それは基本的なものに違いないと思います...:)。

これが私が動作することを期待しているコードですが、動作しません。

char* deneme = Tool::getStringIntoArray("Hello");

クラス'Tool'の静的関数から文字列を渡してchar配列を取得したいと思います。

これが私のツールヘッダーです:

#include <string>
using namespace std;

#ifndef TOOL_H_
#define TOOL_H_

class Tool
{
public:
    static char* getStringIntoArray(string);
};

#endif

その関数を使用する唯一のことは、そこに「静的」なキーワードを与えることであることを学びました。

最後に、関数のTool.cpp:

#include "Tool.h"

char* getStringIntoArray(string str)
{
    int* size = new int(str.size());
    char* array;
    array = new char[*size];

    for ( int i = 0; i < *size; i++) {
        array[i] = str[i];
    }

    delete size;
    return array;
}

それでも、最初に指定したコードが存在するソースファイルでは機能しますが、この関数を静的に使用するためのクラスに入れると、機能しません。エラーを以下に示します。

undefined reference to `Tool::getStringIntoArray(std::basic_string<char, std::char_traits<char>, std::allocator<char> >)' 

どうも。

4

3 に答える 3

2

する必要がありますchar* Tool::getStringIntoArray(string str)

お使いのバージョンは、クラス内の関数ではなく、無料の関数を定義しているだけです。

stringまた、 const参照で渡す必要があります。

char* Tool::getStringIntoArray(const std::string& str)

また

using namespace std;

悪い習慣です(ヘッダーではさらにそうです)。std::代わりに、タイプ資格( )を優先してください。

また

int* size = new int(str.size());
char* array;
array = new char[*size];

悪い。int-を作成するだけです

int size = str.size(); 
array = new char[size]

そのためのポインタは必要ありません。

于 2012-08-24T14:24:51.343 に答える
1

クラス名を修飾する必要があります、あなたはそれを忘れました:

char* Tool::getStringIntoArray(string str)
{

}
于 2012-08-24T14:25:07.100 に答える
1

`Tool :: getStringIntoArray(std :: basic_string、std :: allocator>)'への未定義の参照

探してTool::getStringIntoArrayいますが、あなたが定義しgetStringIntoArrayました。

定義の署名をから変更します

char* getStringIntoArray(string str)

char* Tool::getStringIntoArray(string str)
于 2012-08-24T14:25:50.353 に答える