0

クラスを作成しようとしていて、最終的にコンパイルできましたが、Visual Studio にはまだエラーがあることが示されています (赤い線が表示されます)。

問題は次の場所にあります (Visual Studio が赤い線を引く場所の周りに @problem here@ を書きました):

1. const priority_queue<int,vector<int>,greater<int> @>@ * CM::getHeavyHitters() {
2.     return & @heavyHitters@ ;
3. }

そしてそれは言います:

  1. 「エラー: 識別子が必要です」(最初の行)
  2. 「エラー: 識別子 "heavyHitters" は未定義です」(2 行目)

まったくわからない最初の問題。2つ目は、heavyHittersがCMのメンバーで、CMを入れたのでわかりません。

ところで、私は構築しようとしました。問題は解決しませんでした。

ありがとう!!!

コード全体は次のとおりです。


Count-Min Sketch.cpp

#include "Count-Min Sketch.h"


CM::CM(double eps, double del) {

}

void CM::update(int i, int long unsigned c) {

}

int long unsigned CM::point(int i) {
    int min = count[0][calcHash(0,i)];

    return min;
}

const priority_queue<int,vector<int>,greater<int>>* CM::getHeavyHitters() {
    return &heavyHitters;
}

CM::CM(const CM &) {

}

CM::~CM() {

}


int CM::calcHash(int hashNum, int inpt) {
    int a = hashFunc[hashNum][0];
    int b = hashFunc[hashNum][1];
    return ((a*inpt+b) %p) %w;
}

bool CM::isPrime(int a) {
    bool boo = true;

    return boo;
}

int CM::gePrime(int n) {
    int ge = 2;

    return ge;
}

Count-Min Sketch.h

#pragma once

#ifndef _CM_H
#define _CM_H

using namespace std;
#include <queue>

class CM {
private:
    // d = ceiling(log(3,1/del)), w = ceiling(3/eps)
    int d,w,p; 
    // [d][w]
    int long unsigned *(*count); 
    // [d][2]
    int *(hashFunc[2]); 
    // initialized to 0. norm = sum(ci)
    int long unsigned norm; 
    // Min heap
    priority_queue<int,vector<int>,greater<int>> heavyHitters;

    // ((ax+b)mod p)mod w
    int calcHash(int hashNum, int inpt);
    // Is a a prime number
    bool isPrime(int a);
    // Find a prime >= n
    int gePrime(int n); 

public:
    // Constructor
    CM(double eps, double del);
    // count[j,hj(i)]+=c for 0<=j<d, norm+=c, heap update & check
    void update(int i, int long unsigned c);
    // Point query ai = minjcount[j,hj(i)]
    int long unsigned point(int i); 
    const priority_queue<int,vector<int>,greater<int>>* getHeavyHitters();
    // Copy constructor
    CM(const CM &);
    // Destructor
    ~CM();
};

#endif // _CM_H
4

1 に答える 1

1

>>単一のトークン、右シフト (または抽出) 演算子です。一部のコンパイラは、ネストされたテンプレートの特殊化で正しく認識しません。次のように、2 つの山括弧の間にスペースを入れる必要があります。

Type<specType<nestedSpecType> > ident;
                            ^^^
于 2013-06-15T19:52:34.580 に答える