###前提・実現したいこと
C++の勉強中なのですが、参考書(ロベールのC++入門講座)の写経をしていたところ、コンパイルができずに困っています。
なお、Visual Studio付属のコマンドプロンプトを使用してのコンパイル(cl hoge.cpp)ではこのエラーが出ますが、
Visual Studioでプロジェクトを立ち上げた場合には問題なくビルドできます。
ただ、まだ勉強し始めで軽いプログラムしか作ることがないため、できれば当分は付属コマンドプロンプトを使用していきたいと考えています。
付属コマンドプロンプトを使用してのコンパイルおよび実行がしたいです。
また、後学のためにも、何故Visual Studioのプロジェクトでは可能なのに付属コマンドプロンプトでは不可能なのか、その理由も知りたいところです。
###発生している問題・エラーメッセージ
average.obj : error LNK2019: 未解決の外部シンボル "public: double __thiscall InputStream::Get(void)const " (?Get@InputStream@@QBENXZ) が関数 "bool __cdecl Average(class InputStream &)" (?Average@@YA_NAAVInputStream@@@Z) で参照されました。 average.obj : error LNK2019: 未解決の外部シンボル "public: bool __thiscall InputStream::Set(void)" (?Set@InputStream@@QAE_NXZ) が関数 "bool __cdecl Average(class InputStream &)" (?Average@@YA_NAAVInputStream@@@Z) で参照されました。 average.exe : fatal error LNK1120: 2 件の未解決の外部参照
###該当のソースコード
ロベールのC++入門講座P.315~316とほぼ同じです。変数名等、一部は変更してあります。
inputstream.h
C++
#ifndef INPUTSTREAM_H_ #define INPUTSTREAM_H_ class InputStream{ public: double Get() const; bool Set(); private: double value; }; #endif
inputstream.cpp
C++
#include "inputstream.h" #include <iostream> using namespace std; double InputStream::Get() const{ return value; } bool InputStream::Set(){ cin >> value; return value >= 0; }
average.cpp
C++
#include "inputstream.h" #include <iostream> using namespace std; bool Average(InputStream& stream){ int count; double average = 0; for(count = 0; stream.Set(); count++){ average += stream.Get(); } if(count == 0){ return false; } average /= count; cout << "平均:" << average << endl; return true; } int main(){ while(true){ InputStream stream; if(!Average(stream)){ break; } } return 0; }
###試したこと
前述の通り、Visual Studioでプロジェクトを立ち上げてみたところ、問題なく動作しました。
ただ、希望としてはコマンドプロンプトで実行したいと考えており、そちらの実現方法は全く分かりません。
###補足情報(言語/FW/ツール等のバージョンなど)
言語:C++
開発環境:Visual Studio Community 2017(付属コマンドプロンプトも同様)
まだ回答がついていません
会員登録して回答してみよう