0

我是 C++ 新手,我有一个基本问题要问你。我认为它必须是基本的...... :)。

这是我希望工作的代码,但它没有。

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

我想通过将字符串传递给“工具”类中的静态函数来获取字符数组。

这是我的工具标题:

#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)

您的版本只定义了一个自由函数,而不是类中的函数。

此外,您应该传递stringby 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 回答