這是我的代碼:
//How do you find the length between each sort of subsequence too?
/*
Up,Down is Map<int,int>
UpV,DownV,UpDown are vector<int>
UpMat, DownMat are Map<int,vector<int>>
*/
template <typename T, typename U, typename V>
auto SubSequenceFrequency(U &&Up, U &&Down, T &&UpV, T &&DownV, T &&UpDown, V &&UpMat, V &&DownMat) -> void {
int Lptr = 0;
int Rptr = 0;
while (Rptr < UpDown.size()) {
if (UpDown[Rptr] != UpDown[Lptr]) {
if (UpDown[Lptr] == 0) {
DownV.push_back(Rptr-Lptr);
if (Down.find(Rptr-Lptr) == Down.end()) {
DownMat.insert(std::pair<int, std::vector<int>>(Rptr-Lptr, {Lptr}));
Down[Rptr-Lptr] = 1;
} else {
Down[Rptr-Lptr] = 1;
UpMat[Rptr-Lptr].push_back(Lptr);
}
} else {
UpV.push_back(Rptr-Lptr);
if (Up.find(Rptr-Lptr) == Up.end()) {
UpMat.insert(std::pair<int, std::vector<int>>(Rptr-Lptr, {Lptr}));
Up[Rptr-Lptr] = 1;
} else {
UpMat[Rptr-Lptr].push_back(Lptr);
Up[Rptr-Lptr] = 1;
}
}
Lptr = Rptr;
}
Rptr;
}
if (UpDown[Lptr] == 0) {
DownV.push_back(Rptr-Lptr);
if (Down.find(Rptr-Lptr) == Down.end()) {
DownMat.insert(std::pair<int, std::vector<int>>(Rptr-Lptr, {Lptr}));
Down[Rptr-Lptr] = 1;
} else {
DownMat[Rptr-Lptr].push_back(Lptr);
Down[Rptr-Lptr] = 1;
}
} else {
UpV.push_back(Rptr-Lptr);
if (Up.find(Rptr-Lptr) == Up.end()) {
UpMat.insert(std::pair<int, std::vector<int>>(Rptr-Lptr, {Lptr}));
Up[Rptr-Lptr] = 1;
} else {
UpMat[Rptr-Lptr].push_back(Lptr);
Up[Rptr-Lptr] = 1;
}
}
}
我的確切錯誤是:
BinanceData.cpp: In instantiation of ‘void SubSequenceFrequency(U&&, U&&, T&&, T&&, T&&, V&&, V&&) [with T = std::vector<int>&; U = std::map<int, int>&; V = std::map<int, std::vector<int> > (&)()]’:
BinanceData.cpp:168:25: required from ‘auto SubSequenceDistributionGenerator(T&&, T&&, U&&) [with T = std::__cxx11::basic_string<char>&; U = std::vector<int>&]’
BinanceData.cpp:249:37: required from ‘auto PriceChangeDataToCSV(T&&, T&&, U&&, const int&) [with T = std::__cxx11::basic_string<char>&; U = std::unordered_map<std::__cxx11::basic_string<char>, std::vector<std::__cxx11::basic_string<char> > >&]’
BinanceData.cpp:315:54: required from here
BinanceData.cpp:60:29: error: request for member ‘insert’ in ‘DownMat’, which is of non-class type ‘std::map<int, std::vector<int> >()’
60 | DownMat.insert(std::pair<int, std::vector<int>>(Rptr-Lptr, {Lptr}));
| ~~~~~~~~^~~~~~
BinanceData.cpp:64:26: warning: pointer to a function used in arithmetic [-Wpointer-arith]
64 | UpMat[Rptr-Lptr].push_back(Lptr);
| ~~~~~^
BinanceData.cpp:64:38: error: request for member ‘push_back’ in ‘*((& UpMat) ((sizetype)(Rptr - Lptr)))’, which is of non-class type ‘std::map<int, std::vector<int> >(
’
64 | UpMat[Rptr-Lptr].push_back(Lptr);
| ~~~~~~~~~~~~~~~~~^~~~~~~~~
BinanceData.cpp:69:27: error: request for member ‘insert’ in ‘UpMat’, which is of non-class type ‘std::map<int, std::vector<int> >()’
69 | UpMat.insert(std::pair<int, std::vector<int>>(Rptr-Lptr, {Lptr}));
| ~~~~~~^~~~~~
BinanceData.cpp:72:26: warning: pointer to a function used in arithmetic [-Wpointer-arith]
72 | UpMat[Rptr-Lptr].push_back(Lptr);
| ~~~~~^
BinanceData.cpp:72:38: error: request for member ‘push_back’ in ‘*((& UpMat) ((sizetype)(Rptr - Lptr)))’, which is of non-class type ‘std::map<int, std::vector<int> >(
’
72 | UpMat[Rptr-Lptr].push_back(Lptr);
| ~~~~~~~~~~~~~~~~~^~~~~~~~~
BinanceData.cpp:84:21: error: request for member ‘insert’ in ‘DownMat’, which is of non-class type ‘std::map<int, std::vector<int> >()’
84 | DownMat.insert(std::pair<int, std::vector<int>>(Rptr-Lptr, {Lptr}));
| ~~~~~~~~^~~~~~
BinanceData.cpp:87:20: warning: pointer to a function used in arithmetic [-Wpointer-arith]
87 | DownMat[Rptr-Lptr].push_back(Lptr);
| ~~~~~~~^
BinanceData.cpp:87:32: error: request for member ‘push_back’ in ‘*((& DownMat) ((sizetype)(Rptr - Lptr)))’, which is of non-class type ‘std::map<int, std::vector<int> >()’
87 | DownMat[Rptr-Lptr].push_back(Lptr);
| ~~~~~~~~~~~~~~~~~~~^~~~~~~~~
BinanceData.cpp:93:19: error: request for member ‘insert’ in ‘UpMat’, which is of non-class type ‘std::map<int, std::vector<int> >()’
93 | UpMat.insert(std::pair<int, std::vector<int>>(Rptr-Lptr, {Lptr}));
| ~~~~~~^~~~~~
BinanceData.cpp:96:18: warning: pointer to a function used in arithmetic [-Wpointer-arith]
96 | UpMat[Rptr-Lptr].push_back(Lptr);
| ~~~~~^
BinanceData.cpp:96:30: error: request for member ‘push_back’ in ‘*((& UpMat) ((sizetype)(Rptr - Lptr)))’, which is of non-class type ‘std::map<int, std::vector<int> >(
’
96 | UpMat[Rptr-Lptr].push_back(Lptr);
| ~~~~~~~~~~~~~~~~~^~~~~~~~~
我已經修正了一些愚蠢的錯誤。這發生在編譯時,它只是函式本身。如果有人對我可以做的關于嵌套模板問題的建議有什么建議,那就太好了。
盡管更改了代碼,但關于錯誤,我仍然遇到與之前錯誤相同的錯誤,因此這也一定是一個問題。
謝謝
uj5u.com熱心網友回復:
完整代碼在這里:https : //godbolt.org/z/KdKqTo469
就我而言,問題出在這兩行中:
UpMat[Rptr-Lptr].insert(std::pair<int, std::vector<int>>(Rptr-Lptr, {Lptr}));
UpMat[Rptr-Lptr].insert(std::pair<int, std::vector<int>>(Rptr-Lptr, {Lptr}));
訪問 UpMat 的值:
UpMat[Rptr-Lptr] => access to the value of UpMat and the value is of type std::vector<int>
插入std::vector<int>與:
std::pair<int, std::vector<int>>(Rptr-Lptr, {Lptr})
沒有意義。
uj5u.com熱心網友回復:
問題出在宣告上 UpMat[Rptr-Lptr].insert(std::pair<int, std::vector<int>>(Rptr-Lptr, {Lptr}));
UpMat 是一個std::map<int,std::vector<int>>so UpMat[Rptr-Lptr]isstd::vector并且您試圖在其中插入一個std::pair<int,std::vector<int>>。
我想你的意思是插入該貨幣對的地圖(如:UpMat.insert(std::pair<int, std::vector<int>>(Rptr-Lptr, {Lptr}));)
您不能將 a 插入pair<int,vector<int>>到 avector<int>但可以將其插入到 astd::map<int,std::vector<int>>
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/325455.html
上一篇:為什么編譯器將類視為抽象類?
