2014-05-09 76 views
0

函數的下面的聲明在與克編譯給出一個錯誤++:聲明在C++中的成員函數

void lfsr::rsa (int x, int y, int z, boost::dynamic_bitset<> initSeq(5)) 

錯誤是:expected ‘,’ or ‘...’ before ‘(’ token

這裏是整個代碼:

#include <iostream> 
#include <algorithm> 
#include <vector> 
#include <math.h> 
#include <boost/dynamic_bitset.hpp> 

using namespace std; 

class lfsr 
{ 
    int y, xx, polyLoc, turnCount, n, end, p, q, d, f, e, m, c, l, g; 
    boost::dynamic_bitset<> inpSeq; 
    boost::dynamic_bitset<> operSeq; 
    boost::dynamic_bitset<> bit; 
    vector<int> xorArray; 
    vector<int> keyReg; 
public: 
    void rsa(int, int, int, boost::dynamic_bitset<>); 
    int key() 
    { 
     while (polyLoc > 0) 
     { 
      xorArray.push_back(polyLoc % 10); 
      polyLoc /= 10; 
     } 
     sort(xorArray.rbegin(), xorArray.rend()); 
     operSeq = inpSeq; 
     keyReg.push_back(inpSeq[0]); 
     int x = xorArray[0]; 
     do { 
      for (unsigned int r = 1; r < xorArray.size(); r++) 
      { 
       bit[4] = operSeq[x]; 
       y = xorArray[r]; 
       bit[4] = bit[4]^operSeq[y]; 
      } 
      operSeq >>= 1; 
      operSeq[4] = bit[4]; 
      keyReg.push_back(operSeq[0]); 
      turnCount++; 
     } 
     while ((operSeq != inpSeq) && (turnCount < 1024)); 
     for (unsigned int i = 0; i < keyReg.size(); i++) 
     { 
      if (keyReg[i] == 1) 
      { 
       m = m + int(pow(2, i)); 
      } 
      n = p * q; 
      f = (p - 1) * (q - 1); 
      for (int k = 0; end < 1; k++) 
      { 
       if ((1 + k * f) % d == 0) 
       { 
        end = 2; 
        e = (1 + (k * f))/d; 
       } 
      } 
      g = int(pow(m, e)); 
      c = g % n; 
      return (c); 
     } 
    }; 

    lfsr() // Constructor 
    { 
     y = 0; 
     turnCount = 0; 
     xx = 0; 
     polyLoc = 320; 
     n = 0; 
     end = 0; 
     p = 0; 
     q = 0; 
     d = 0; 
     f = 0; 
     e = 0; 
     m = 0; 
     c = 0; 
     l = 0, g = 0; 
     boost::dynamic_bitset<> inpSeq(5); 
     boost::dynamic_bitset<> operSeq(5); 
     boost::dynamic_bitset<> bit(5); 

    } 

    void lfsr::rsa(int x, int y, int z, boost::dynamic_bitset<> initSeq(5)) 
    { 
     p = x; 
     q = y; 
     d = z; 
     inpSeq = initSeq; 
    } 

    int main() 
    { 
     lfsr public_key, private_key; 
     public_key.rsa(29, 41, 74, 00111); 
     private_key.rsa(43, 89, 73, 01011); 
     cout << "Public key is: " << public_key.key() << endl; 
     cout << "Private key is: " << private_key.key() << endl; 
     cin.get(); 
     return 0; 
    } 
+2

'升壓::來,dynamic_bitset <> initSeq(5)'作爲函數參數根本就不是有效的語法。 – chris

+0

請問有效的語法是什麼? –

+0

對於什麼,一個[默認參數](http://en.cppreference.com/w/cpp/language/default_arguments)?你也應該知道從0開始的文字是八進制文字。我不太確定這是你想要的。 – chris

回答

0

更改此代碼

lfsr() //Constructor 

lfsr::lfsr() //Constructor 

和接入構造函數的聲明到類

class lfsr { 
    .... 
public: 
    lfsr(); 
    .... 

並移動initSeq1定義來聲明默認參數。 (它必須在聲明中)。

此外,您的默認參數是錯誤的。它應該是initSeq = boost::dynamic_bitset<>(5)

改變此密碼

class lfsr { 
    .... 
public: 
    void rsa (int, int, int, boost::dynamic_bitset <>); 
    .... 
}; 
void lfsr::rsa (int x, int y, int z, boost::dynamic_bitset <> initSeq(5)) 
{ 
    ... 

class lfsr { 
    .... 
public: 
    void rsa (int, int, int, boost::dynamic_bitset<> = boost::dynamic_bitset<>(5)); 
    .... 
}; 
void lfsr::rsa (int x, int y, int z, boost::dynamic_bitset<> initSeq) 
{ 
    ... 
+0

關於將構造函數的聲明插入到我的類中,這意味着我必須在lsfrs()的括號內寫入15個空整數,並且需要3個boost :: dyanmic bitsets? –

+0

@MohamedAhmed也許不..你的構造函數沒有參數嗎? – ikh

+0

我認爲不是,在我用我的問題發佈的代碼中定義爲構造函數的函數,即使用0均衡大約15個int變量的函數不是所有參數嗎? –

相關問題