1

プログラムを実行しようとしていますが、コンパイルされず、エラーが発生します。私は物事を変えましたが、うまくいかないようです。コードは次のとおりです。

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


 int main()
   {
int answer;
char symbol;
char n, N;
StackLS stack;
bool balenced = true;

      do {
    cout << " ********** MENU ********** " << endl;
    cout << " 1. Basic Brackets () " << endl;
    cout << " 2. Standard Brackets ()[]{} " << endl;
    cout << " 3. User-Defined brackets " << endl;
    cout << " Please enter your choice: " << endl;

switch (answer){
case 1: 
    cout << "Current Setting: () " << endl;
    cout << "Enter your expression followed by a ; : " << endl;
    cin >> symbol;

    do {    

      if (symbol = '(')
    stack.push( '(' );
      else 
      if (symbol = ')' )
      {
      if (stack.isEmpty())
        balenced = false;
            else {
              symbol = stack.top();
        stack.pop();
    }
if (balenced)
    cout << "Expression is well-formed" << endl;
else
    cout << "Expression is not well-formed" << endl;
       }
           }
    while (symbol != ';' && balenced);
    stack.pop();

        }
       }
      while (answer != 'n' || 'N');

    } // end main

私はプログラムを終了していません。次のケースに進む前に、これまでに持っていたものがコンパイルされることを確認したかったのです。次に、発生したエラーを投稿します。彼らです:

  1. 1> e:\ c++言語2\整形式式チェッカーソリューション\整形式式チェッカープロジェクト\main.cpp(11):警告C4101:'n':参照されていないローカル変数

  2. 1> e:\ c++言語2\整形式式チェッカーソリューション\整形式式チェッカープロジェクト\main.cpp(11):警告C4101:'N':参照されていないローカル変数

  3. 1> e:\ c++言語2\整形式式チェッカーソリューション\整形式式チェッカープロジェクト\main.cpp(22):警告C4700:初期化されていないローカル変数'answer'が使用されました

1> ManifestResourceCompile:1>すべての出力が最新です。

  1. 1> main.obj:エラーLNK2019:未解決の外部シンボル "public:int __thiscall StackLS :: top(void)const"(?top @ StackLS @@ QBEHXZ)関数_mainで参照

  2. 1> main.obj:エラーLNK2019:未解決の外部シンボル "public:void __thiscall StackLS :: push(int const&)"(?push @ StackLS @@ QAEXABH @ Z)関数_mainで参照

  3. 1> E:\C++言語2\Well-Formed Expression Checker Solution \ Debug \ Well-Formed Expression Checker Project.exe:致命的なエラーLNK1120:2つの未解決の外部

助けてくれてありがとう。

4

5 に答える 5

3

警告はまさにそれです-警告。プログラムのコンパイルを止めることはありませんが、それらを調べて修正する必要があります。

あなたのプログラムは実際に正常にコンパイルされます。エラーがリンクを妨げています。つまり、コードがマシン コードにコンパイルされ、*.exeファイルに組み込まれると、いくつかの部分が欠落していることが判明します。StackLS.hこのファイルには、C++ ソース ファイル、または *.lib または *.dll ファイルが付属しているように見えます。何を持っていても、不足している部分を提供するために、実行可能ファイルをビルドするときにそれらを含める必要があります。

于 2012-04-18T04:11:23.563 に答える
1

コンパイルが完了しました。未使用の変数に関する警告が表示されました。リンクに失敗したため、欠落しているのは StackLS が実装されているファイルです。

ヘッダーを含めるだけでは、それらは「実装」されません。

したがって、StackLS.cpp などが必要です。

あなたはそれを投稿していません。

于 2012-04-18T04:12:41.253 に答える
0

問題は (おそらく) コードにあるのではなく、コンパイラ/リンカーを呼び出す方法にあります。

int StackLS::top() constとが定義されているソース ファイルをコンパイルしvoid StackLS::push(int const &)、実行可能ファイルをリンクするときに結果をリンカーに渡す必要があります。

于 2012-04-18T04:13:21.213 に答える
0

StackLS というライブラリを使用してプログラムを作成しました。これは、プリコンパイルされたライブラリまたはソース コードのいずれかです。

を使用してこのライブラリへの参照を追加し#include "StackLS.h"、コンパイラがコードをコンパイルできるようにします。これにより、コードのコンパイル済みバージョンが作成されます。

次の段階では、コンパイル済みコードをコンパイル済み StackLS ライブラリにリンクします。これはリンカーの仕事です。最近では、同じプログラム (コンパイラ) が通常、このステップを実行するために必要なすべての呼び出しも行います (ただし、自分自身をリンクすることはできます) が、技術的にはコンパイルとは別のステップです。

StackLS がコードの場合は、それもコンパイルする必要があります。または、コンパイル済みのライブラリの場合は、リンカにその場所を伝える必要があります。

Make ファイルに、StackLS ソース コードまたはライブラリへの参照を追加する必要があります (この場合、通常は .dll または .lib タイプのファイルです)。

于 2012-04-18T04:16:24.673 に答える
-1

次の行を削除します。

文字n、N; StackLS スタック。

そしてあなたがどうなるか見てください。

于 2012-04-18T04:13:43.300 に答える