Mã này biên dịch và làm việc như mong đợi (nó ném lúc chạy, nhưng đừng bận tâm):C++ template biên soạn lỗi: dự kiến ban đầu thể hiện trước '>' dấu hiệu
#include <iostream>
#include <boost/property_tree/ptree.hpp>
void foo(boost::property_tree::ptree &pt)
{
std::cout << pt.get<std::string>("path"); // <---
}
int main()
{
boost::property_tree::ptree pt;
foo(pt);
return 0;
}
Nhưng ngay sau khi tôi thêm các mẫu và thay đổi mẫu foo
vào
template<class ptree>
void foo(ptree &pt)
tôi nhận được một lỗi trong GCC:
test_ptree.cpp: In function ‘void foo(ptree&)’:
test_ptree.cpp:7: error: expected primary-expression before ‘>’ token
nhưng không có lỗi với MSVC++! Lỗi nằm trong dòng được đánh dấu <---
. Và một lần nữa, nếu tôi thay đổi dòng sự cố thành
--- std::cout << pt.get<std::string>("path"); // <---
+++ std::cout << pt.get("path", "default value");
lỗi biến mất (sự cố rõ ràng là <std::string>
).
Boost.PropertyTree yêu cầu Tăng> = 1,41. Hãy giúp tôi hiểu và sửa lỗi này.
Xem Templates: template function not playing well with class’s template member function - một câu hỏi phổ biến tương tự có chứa câu trả lời tốt khác và giải thích.
liên quan: http://stackoverflow.com/questions/1682844/ template-template-function-not-playing-well-với-class-template-member-functi/1682885 (Nhân bản?) – GManNickG
Có, nó là một bản sao. Cảm ơn sự giúp đỡ của bạn! –