【发布时间】:2017-02-22 23:31:45
【问题描述】:
所以,我来自 Java,学习 c++。我想实现一个可以这样调用的程序,由一个测试文件(boots)提供:
auto subject = anagram::anagram("diaper");
auto matches = subject.matches({"hello", "world", "zombies","pants"});
vector<string> expected;
BOOST_REQUIRE_EQUAL_COLLECTIONS(expected.begin(), expected.end(), matches.begin(), matches.end());
我说对了吗,anagram::anagram(...) 是一个构造函数,构造一个提供方法matches(...) 的对象?因为在我的实现中(参见下文),我收到一条错误消息(不是英语),例如“无法直接调用构造函数”。我认为 C++ 中的构造函数有一些我不理解的地方。
// this is part of my implementation of anagram.h
class anagram{
public:
anagram(const string a);
vector<string> matches(vector<string> &list);
private:
string a;
bool isAnagram(string s);
};
我知道的唯一另一件事是anagram::anagram(...) 可能是一个静态方法,其返回值类似于this,但这对我来说没有意义。所以如果有人能解释一下就好了:)
【问题讨论】:
-
auto subject = anagram::anagram("diaper");不是有效的构造函数调用。 -
它可能是命名空间内的工厂函数。
-
错字;构造函数被“调用”,如
ClassName(stuff)或ClassName{stuff}。您没有资格调用像 `CalssName::ClassName(stuff) -
好的,我知道它不是构造函数,但也不是错字(我很确定),因为它是在线代码练习网站提供的测试文件。你能详细说明那个工厂函数吗?
-
@asu 你是对的,我自己会以不同的方式编写该代码,但由于它是一个测试,我需要坚持我所得到的并提供那个无用的命名空间
标签: c++ object constructor static