2014-10-06 32 views
0

在下面的代碼,我得到錯誤:預期前主表達式 '(' 令牌

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

這裏是anagram.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搭建時才能獲得。有人可以幫我找到錯誤嗎?

+2

你可以發佈'anagram'定義的代碼嗎? – CoryKramer 2014-10-06 22:46:36

+0

您在類定義的末尾忘了分號。 – 2014-10-06 22:48:36

+0

anagram定義的代碼在這裏。 – 2014-10-06 23:00:10

回答

3

你已經把你的class anagram放在namespace anagram(可憐的想法,IMO)裏面,所以你顯然想要的名字是anagram::anagram。本身,anagram只是命名空間。

所以,至少第一眼看上去,它出現在代碼應爲:

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

至於爲什麼你會得到它的一臺機器上,但不是另一個:我猜你有一個不匹配的文件,比如一個包含using namespace anagram;這是從另一個丟失。

+0

當我做'anagram :: anagram(「尿布」);'它說我不能在我的本地機器上顯式調用構造函數。當然,我沒有關於該代碼的任何命名空間。 – 2014-10-06 23:14:48

+0

是的,嘗試使用沒有命名空間的'anagram :: anagram'會是一個問題。所以我們已經涵蓋了真正的問題:您需要正確地命名類以供編譯器找到它(並且如果它在兩臺機器上有不同的名稱,那麼您需要*上使用*不同名稱並不奇怪那些機器)。 – 2014-10-06 23:26:00

+0

好吧,只要我測試它並做晚餐,我會將其標記爲正確的 – 2014-10-06 23:37:17

相關問題