来自另一个 cpp 文件的函数内部的变量声明

问题描述 投票:0回答:1

我对密码学很感兴趣,并决定尝试编写一个 AES 库。不过已经很久没有写cpp了,有点生疏了。我的 AES.cpp 文件中有此代码:

#include "AES.h"
#include <iostream>
#include <cstdint>

void initialize_aes(int Nk){
  int Nr;
  try {
    if(Nk == 4){
      Nr = 10;
    } else if(Nk == 6){
        Nr = 12;
    } else if(Nk == 8){
      Nr = 14;
    } else {
      throw (Nk);
    }
  }
  catch (int a){
    std::cout << "error: '" << a << "' is not an accepted value for key length";
  }
};

我的 main.cpp 文件中的代码:

#include "AES.h"
#include <iostream>
#include <cstdint>

int main(){
  uint8_t i[256];
  initialize_aes(6);
  std::cout << Nr;
}

是的,文件链接正确并且有一个 AES.h 文件。我只是没有将其包含在这篇文章中。

我想要的是能够声明并定义 Nr 变量,然后在 main.cpp 文件中调用它。我尝试过类和外部标签,但它们不起作用,我不确定我是否做对了。理想情况下,我会使用一个类,但我在将变量放入函数并让函数将该变量设置为类时遇到问题。 AES.cpp:

class AES {
  public:
    int Nr;
    int Nk;
    int Nb = 4;
};

void initialize_aes(a, int Nk){
  try {
    if(Nk == 4){
      AES a;
      AES_4.Nr = 10;
      AES_4.Nk = 4;
    } else if(Nk == 6){
      AES a;
      AES_6.Nr = 12;
      AES_6.Nk = 6;
    } else if(Nk == 8){
      AES a;
      AES_8.Nr = 14;
      AES_6.Nk = 8;
    } else {
      throw (Nk);
    }
  }
  catch (int a){
    std::cout << "error: '" << a << "' is not an accepted value for key length";
  }
  
};

主要.cpp:

int main(){
  AES aes; //I am not sure what the best format would be to put it in the function
  initialize_aes(aes, 6);
  std::cout << aes.Nr;
}

我需要的是在函数内创建一个可以在任何地方调用的新类对象。我需要使用不同的返回类型吗?任何建议将不胜感激。

c++ variables global-variables
1个回答
0
投票

这是一种思考方式。 将初始化放在构造函数中,而不是使其成为一个单独的函数。

还要注意,在这样的类中将错误写入 cout 并不是一个好主意。 如果您最终在没有标准输出的 GUI 应用程序中使用它怎么办? 我在这里所做的只是设置一个稍后检测到的标志,但您当然可以抛出异常。

class AES {
public:
    int Nr;
    int Nk;
    int Nb = 4;
    bool ok;

    AES( int _Nk)
        : Nk( _Nk )
        , ok( true )
    {
        if(Nk == 4){
            Nr = 10;
        } else if(Nk == 6){
            Nr = 12;
        } else if(Nk == 8){
            Nr = 14;
        } else {
            ok = false;
        }
    }
};

int main(){
  AES aes( 6 );
  if( aes.ok )
      std::cout << aes.Nr << "\n";;
}
最新问题
© www.soinside.com 2019 - 2025. All rights reserved.