0

私は一生の間、何が悪いのか理解できません。

私のmakefile:

all: main.o rsa.o
    g++ -Wall -o main bin/main.o bin/rsa.o -lcrypto

main.o: src/main.cpp inc/rsa.h
    g++ -Wall -c src/main.cpp -o bin/main.o -I inc

rsa.o: src/rsa.cpp inc/rsa.h
    g++ -Wall -c src/rsa.cpp -o bin/rsa.o -I inc

私のメインクラス:

#include <iostream>
#include <stdio.h>
#include "rsa.h"

using namespace std;
int main()
{
    //RSA rsa;
    return 0;
}

私の.cpp:

#include "rsa.h"
#include <iostream>
using namespace std;

RSA::RSA(){}

私の.h:

#ifndef RSA_H
#define RSA_H

class RSA
{
    RSA();
};
#endif

次のエラーが発生します。

In file included from src/main.cpp:7:0:
inc/rsa.h:7:7: error: using typedef-name ‘RSA’ after ‘class’
/usr/include/openssl/ossl_typ.h:140:23: error: ‘RSA’ has a previous declaration here

私はすべてを試したような気がしますが、行き詰まっています。何か案は?

4

2 に答える 2

4

/usr/include/openssl/ossl_typ.h:140:23:エラー:「RSA」には以前の宣言があります

RSAエラーメッセージから、 OpenSSL内で定義された名前の別のクラスとシンボル名が衝突しているようです。
この問題を解決するには、次の2つの方法があります。

  1. クラス名を変更するか
  2. 同じ名前を維持したい場合は、名前空間にまとめます。
于 2012-10-03T04:09:36.417 に答える
1

コンパイラは、ossl_typ.hファイルでRSAのtypedefを検出しました。これは、プログラムのコンパイル時に間接的に#includeされます。私は少なくとも3つの解決策を考えることができます:

  1. クラス名を別の名前に変更します。

  2. クラスをに入れますnamespace

  3. OpenSSLヘッダーがビルドに含まれている理由を理解してください。周りを見回した後、#includeされているファイルが表示されるというこのQ&Aを見つけました。gcc -w -H <file>そこから、OpenSSLヘッダーへの依存関係を削除できる場合があります。

于 2012-10-03T04:17:45.643 に答える