错误:在“(”标记之前应为主表达式
error: expected primary-expression before ‘(’ token
在下面的代码中,我得到了
In member function ‘void no_matches::test_method()’:
error: expected primary-expression before ‘(’ token
auto subject = anagram("diaper");
代码从这里开始
#include "anagram.h"
#define BOOST_TEST_MAIN
#include <boost/test/unit_test.hpp>
using namespace std;
BOOST_AUTO_TEST_CASE(no_matches)
{
auto subject = 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.cpp
#include "anagram.h"
#include <boost/algorithm/string/case_conv.hpp>
#include <algorithm>
#include <cctype>
using namespace std;
namespace
{
string make_key(std::string const& s)
{
string key{boost::to_lower_copy(s)};
sort(key.begin(), key.end());
return key;
}
}
namespace anagram
{
anagram::anagram(string const& subject)
: subject_(subject),
key_(make_key(subject))
{
}
vector<string> anagram::matches(vector<string> const& matches)
{
vector<string> result;
for (string const& s : matches) {
if (s.length() == key_.length()
&& boost::to_lower_copy(s) != boost::to_lower_copy(subject_)
&& make_key(s) == key_) {
result.push_back(s);
}
}
return result;
}
}
这是变位词.h
#if !defined(ANAGRAM_H)
#define ANAGRAM_H
#include <string>
#include <vector>
namespace anagram
{
class anagram
{
public:
anagram(std::string const& subject);
std::vector<std::string> matches(std::vector<std::string> const& matches);
private:
std::string const subject_;
std::string const key_;
};
}
#endif
我在本地机器上没有得到这个错误。我只有在与https://travis-ci.org。有人能帮我找到虫子吗?
您已经将class anagram
放在namespace anagram
(不好的主意,IMO)中,所以您显然想要的名称是anagram::anagram
。anagram
本身只是命名名称空间。
所以,至少乍一看,代码应该是:
auto subject = anagram::anagram("diaper");
至于为什么你会在一台机器上得到它,而不是在另一台机器:我猜你有一个不匹配的文件,比如一个包含using namespace anagram;
的文件,而另一个却缺少。
相关文章:
- 在 C++ 中使用正则表达式错误时出现问题 括号表达式中的范围无效
- C++ 标记之前预期主表达式'('错误
- 正则表达式中带有卷轴大括号的正则表达式错误
- C++初学者错误:主要表达式错误
- 代数树表达式C++错误:未解析的外部符号"Public:_thiscall AlgebraicTreeExpression::~AlgebraicTreeExpression(void) ..."
- 使用多线程处理对象数组 - 无效使用 void 表达式错误
- 为什么 if constexpr 不会使这个核心常量表达式错误消失?
- 提升正则表达式错误:未初始化的提升::match_results
- C++比较表达式错误
- C++ "主表达式"错误
- C++ 正则表达式错误(未处理的异常)
- 'this'不能用于常量表达式错误 (C++)
- 代码块引发有关for_each的预期主表达式错误
- Boost Regex中的命名子表达式错误
- C++之前的主要表达式错误
- Ubuntu 上的正则表达式错误
- C++正则表达式错误
- 理解常量表达式错误
- 成员函数和预期的主表达式错误
- Xcode中应有表达式错误