ошибка: ожидаемое первичное выражение до токена ‘(’

В следующем коде я получаю

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;
}
}

Вот анаграмма

#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 . Может кто-нибудь помочь мне найти ошибку?

0

Решение

Вы положили свой class anagram внутри namespace anagram (плохая идея, ИМО), так что имя, которое вы, очевидно, хотите, anagram::anagram, Само по себе anagram просто называет пространство имен.

Итак, по крайней мере, на первый взгляд кажется, что код должен читать:

auto subject = anagram::anagram("diaper");

Что касается того, почему вы получите его на одном компьютере, а не на другом: я думаю, у вас есть несоответствующий файл, например, содержащий using namespace anagram; это отсутствует от другого.

3

Другие решения


По вопросам рекламы [email protected]