質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
Visual Studio

Microsoft Visual StudioはMicrosoftによる統合開発環境(IDE)です。多種多様なプログラミング言語に対応しています。

C++

C++はC言語をもとにしてつくられた最もよく使われるマルチパラダイムプログラミング言語の1つです。オブジェクト指向、ジェネリック、命令型など広く対応しており、多目的に使用されています。

Q&A

解決済

2回答

14720閲覧

"未解決の外部シンボル"エラーが出てコンパイルできない

AloneLeisure

総合スコア13

Visual Studio

Microsoft Visual StudioはMicrosoftによる統合開発環境(IDE)です。多種多様なプログラミング言語に対応しています。

C++

C++はC言語をもとにしてつくられた最もよく使われるマルチパラダイムプログラミング言語の1つです。オブジェクト指向、ジェネリック、命令型など広く対応しており、多目的に使用されています。

0グッド

0クリップ

投稿2017/08/27 01:29

###前提・実現したいこと
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++

1#ifndef INPUTSTREAM_H_ 2#define INPUTSTREAM_H_ 3 4class InputStream{ 5public: 6 double Get() const; 7 bool Set(); 8 9private: 10 double value; 11}; 12 13#endif

inputstream.cpp

C++

1#include "inputstream.h" 2#include <iostream> 3using namespace std; 4 5double InputStream::Get() const{ 6 return value; 7} 8 9bool InputStream::Set(){ 10 cin >> value; 11 return value >= 0; 12}

average.cpp

C++

1#include "inputstream.h" 2#include <iostream> 3using namespace std; 4 5bool Average(InputStream& stream){ 6 int count; 7 double average = 0; 8 9 for(count = 0; stream.Set(); count++){ 10 average += stream.Get(); 11 } 12 if(count == 0){ 13 return false; 14 } 15 16 average /= count; 17 cout << "平均:" << average << endl; 18 return true; 19} 20 21int main(){ 22 while(true){ 23 InputStream stream; 24 if(!Average(stream)){ 25 break; 26 } 27 } 28 29 return 0; 30}

###試したこと
前述の通り、Visual Studioでプロジェクトを立ち上げてみたところ、問題なく動作しました。
ただ、希望としてはコマンドプロンプトで実行したいと考えており、そちらの実現方法は全く分かりません。

###補足情報(言語/FW/ツール等のバージョンなど)
言語:C++
開発環境:Visual Studio Community 2017(付属コマンドプロンプトも同様)

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答2

0

ベストアンサー

こんにちは。

コマンドラインでコンパイルする際に、inputstream.cppをビルド対象に含めていないだけではないでしょうか?

下記コマンドでビルドしてみて下さい。(/EHscと/W4はなくてもよいです。)

> cl average.cpp inputstream.cpp /EHsc /W4

投稿2017/08/27 02:05

Chironian

総合スコア23272

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

AloneLeisure

2017/08/27 02:23

ありがとうございました。解決しました。 コマンドラインについての勉強が不足していました。
guest

0

cl average.cpp inputstream.cppではどうですか?

投稿2017/08/27 02:02

fiveHundred

総合スコア9797

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

AloneLeisure

2017/08/27 02:23

ありがとうございました。解決しました。 コマンドラインについての勉強が不足していました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問