我也尝试在我的模板c ++中使用typedef,但它不起作用,我不知道如何解决它。
template <typename object>
class MyVector
{
public:
typedef object* iter;
iter begin();
};
template <typename object>
iter MyVector<object>::begin() //here is problem
{
}
你可以告诉我它为什么不起作用吗?
答案 0 :(得分:6)
iter
在这种情况下并不意味着什么,你需要明确限定它:
template <typename object>
typename MyVector<object>::iter MyVector<object>::begin()
{
}
在C ++ 11中,您可以使用尾随返回类型:
template <typename object>
auto MyVector<object>::begin() -> iter
{
}
答案 1 :(得分:3)
因为编译器在遇到令牌iter
时不知道它必须在MyVector<object>
内搜索iter
。明确提供iter
的范围,如此:
template <typename object>
typename MyVector<object>::iter MyVector<object>::begin() //here is problem
{
}
答案 2 :(得分:2)
尝试以下
template <typename object>
class MyVector
{
public:
typedef object* iter;
iter begin();
};
template <typename object>
typename MyVector<object>::iter MyVector<object>::begin() //here is problem
{
}
Typename iter
是类MyVector
的成员,您必须使用该语法来访问类成员。
答案 3 :(得分:0)
MyVector<object>::iter
就像你在样本中的内部类型一样,你需要在主类之外的任何用法之前指定主类类型:
<body>
<h1>AJAX Example</h1>
<c:url value="/ajax/ajaxTime.html" var="url1" />
<h2><div id="myDiv" data="${url1}">Let AJAX make this call</div></h2>
<button type="button" onclick="loadXMLDoc()">View data time</button>
</body>
<script>
function loadXMLDoc() {
var xmlhttp;
if (window.XMLHttpRequest) {// code for IE7+, Firefox, Chrome, Opera, Safari
xmlhttp = new XMLHttpRequest();
} else {// code for IE6, IE5
xmlhttp = new ActiveXObject("Microsoft.XMLHTTP");
}
xmlhttp.onreadystatechange = function() {
if (xmlhttp.readyState == 4 && xmlhttp.status == 200) {
document.getElementById("myDiv").innerHTML = xmlhttp.responseText;
}
}
xmlhttp.open("GET", document.getElementById("myDiv").getAttribute("data"), true);
xmlhttp.setRequestHeader("X-Requested-With","XMLHttpRequest");
xmlhttp.send();
}
</script>