Calculator.h
export const useGeoFireDatabaseQuery = (coordinates) => {
const [data, setData] = useState([])
const geoQuery = geoFire.query({
center: coordinates,
radius: 2
});
useEffect(()=>{
if (coordinates != null) {
geoQuery.on("key_entered", (key, location, distance)=> {
firebase.database().ref('data').child(key).on('value', (snapshot) => {
const dataList=[]
snapshot.forEach(doc => {
dataList.push(doc.val())
})
setData(dataList)
})
})
}
},[])
console.log('Data',data)
return data
}
Calculator.cpp
class Calculator {
Calculator();
template<typename... Args>
static auto add(Args... args);
};
main.cpp
#include "Calculator.h"
Calculator::Calculator() {}
template<typename... Args>
auto Calculator::add(Args... args) {
return (args + ... + 0);
}
具有推定返回类型的函数'add
'在定义之前不能使用
如果我将#include <iostream>
#include "Calculator.h"
int main(){
Calculator cal;
std::cout<< cal.add(1,2,3);
}
方法移到头文件中,则没有错误。我想念什么?
答案 0 :(得分:1)
我缺少什么?
错误消息对此进行了解释:您试图在定义函数之前使用推导的返回类型。那是不允许的 1 。为了清楚起见,您在Calculator::add
中调用了函数main
,但是在调用函数之前,未在同一转换单元中定义函数Calculator::add
。实际上,它根本不在同一翻译单元中定义。
您需要:
1 不允许这样做,因为根据函数定义中的return语句推导返回类型。如果没有函数定义,则编译器将无法找出返回类型。