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

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

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

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

Q&A

解決済

1回答

2510閲覧

VC++ メンバ関数のところでエラーが出る

robomoco

総合スコア31

C++

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

0グッド

0クリップ

投稿2019/05/07 13:30

Parser.hにあるstring arg1()という関数がエラーを吐きます。原因が分かりません。

#Main.cpp

C++

1#include <iostream> 2#include "Parser.h" 3using namespace std; 4 5int main() 6{ 7 Parser parser; 8 parser.advance(); 9 cout << parser.commandType() << endl; 10 parser.advance(); 11 cout << parser.commandType() << endl; 12 parser.advance(); 13 cout << parser.commandType() << endl; 14 parser.advance(); 15 cout << parser.commandType() << endl; 16} 17

#Parser.h

C++

1#pragma once 2#include <fstream> 3#include <sstream> 4#include <string> 5#include <iostream> 6 7 8enum comType{ 9 C_ERROR, 10 C_ARITHMATIC, 11 C_PUSH, 12 C_POP, 13 C_LABEL, 14 C_GOTO, 15 C_IF, 16 C_FUNCTION, 17 C_RETURN, 18 C_CALL 19}; 20 21class Parser { 22public: 23 Parser(); //読みこみファイルを開く 24 void advance(); //次のコマンドを読みこむ 25 comType commandType(); //コマンドのタイプを返す 26 string arg1(); //現コマンドの1番目の引数を返す 27 int arg2(); //現コマンドの2番目の引数を返す 28 std::ifstream ifs; 29 std::string curcmd; //現在コマンド 30};

#Parser.cpp

C++

1#include "Parser.h" 2using namespace std; 3//クラスParserの実装 4Parser::Parser() 5{ 6 string infilename; 7 cin >> infilename; 8 ifs.open(infilename); 9 while(ifs.fail()) { 10 cin >> infilename; 11 ifs.open(infilename); 12 } 13} 14 15void Parser::advance() 16{ 17 getline(ifs, curcmd); 18 while (curcmd[0] == ' ') { 19 curcmd.erase(curcmd.begin()+0); 20 } 21} 22 23comType Parser::commandType() 24{ 25 26 cout << curcmd << endl; 27 28 string curcmdope = curcmd; 29 curcmdope = curcmdope.substr(0, curcmd.find(" ")); 30 if (curcmdope == "add" || curcmdope == "sub" || curcmdope == "neg" || 31 curcmdope == "eq" || curcmdope == "qt" || curcmdope == "lt" || 32 curcmdope == "and" || curcmdope == "or" || curcmdope == "not") { 33 34 return C_ARITHMATIC; 35 } 36 else if (curcmdope == "push") { 37 return C_PUSH; 38 } 39 else if (curcmdope == "pop") { 40 return C_POP; 41 } 42 else { 43 return C_ERROR; 44 } 45} 46 47string Parser::arg1() 48{ 49 string curcmdarg1 = curcmd; 50 51 if (commandType() == C_RETURN) { 52 return curcmd; 53 } 54 else if (commandType() == C_ARITHMATIC) { 55 return curcmd; 56 } 57 else if (commandType() == C_PUSH || commandType() == C_POP) { 58 59 while (curcmdarg1[0] =! ' ') { 60 curcmdarg1.erase(curcmd.begin() + 0); 61 } 62 while (curcmdarg1[0] == ' ') { 63 curcmdarg1.erase(curcmd.begin() + 0); 64 } 65 curcmdarg1 = curcmdarg1.substr(0, curcmd.find(" ")); 66 67 return curcmdarg1; 68 } 69}

#エラー

1>------ ビルド開始: プロジェクト: VM_Inverter, 構成: Debug Win32 ------ 1>Main.cpp 1>c:\users\ken\documents\nand2tetris\projects\07\virtualmachine\vm_inverter\parser.h(26): error C3646: 'arg1': 不明なオーバーライド指定子です 1>c:\users\ken\documents\nand2tetris\projects\07\virtualmachine\vm_inverter\parser.h(26): error C2059: 構文エラー: '(' 1>c:\users\ken\documents\nand2tetris\projects\07\virtualmachine\vm_inverter\parser.h(26): error C2238: ';' の前に無効なトークンがあります。 1>Parser.cpp 1>c:\users\ken\documents\nand2tetris\projects\07\virtualmachine\vm_inverter\parser.h(26): error C3646: 'arg1': 不明なオーバーライド指定子です 1>c:\users\ken\documents\nand2tetris\projects\07\virtualmachine\vm_inverter\parser.h(26): error C2059: 構文エラー: '(' 1>c:\users\ken\documents\nand2tetris\projects\07\virtualmachine\vm_inverter\parser.h(26): error C2238: ';' の前に無効なトークンがあります。 1>c:\users\ken\documents\nand2tetris\projects\07\virtualmachine\vm_inverter\parser.cpp(48): error C2039: 'arg1': 'Parser' のメンバーではありません。 1>c:\users\ken\documents\nand2tetris\projects\07\virtualmachine\vm_inverter\parser.h(21): note: 'Parser' の宣言を確認してください 1>c:\users\ken\documents\nand2tetris\projects\07\virtualmachine\vm_inverter\parser.cpp(50): error C2065: 'curcmd': 定義されていない識別子です。 1>c:\users\ken\documents\nand2tetris\projects\07\virtualmachine\vm_inverter\parser.cpp(52): error C3861: 'commandType': 識別子が見つかりませんでした 1>c:\users\ken\documents\nand2tetris\projects\07\virtualmachine\vm_inverter\parser.cpp(53): error C2065: 'curcmd': 定義されていない識別子です。 1>c:\users\ken\documents\nand2tetris\projects\07\virtualmachine\vm_inverter\parser.cpp(55): error C3861: 'commandType': 識別子が見つかりませんでした 1>c:\users\ken\documents\nand2tetris\projects\07\virtualmachine\vm_inverter\parser.cpp(56): error C2065: 'curcmd': 定義されていない識別子です。 1>c:\users\ken\documents\nand2tetris\projects\07\virtualmachine\vm_inverter\parser.cpp(58): error C3861: 'commandType': 識別子が見つかりませんでした 1>c:\users\ken\documents\nand2tetris\projects\07\virtualmachine\vm_inverter\parser.cpp(61): error C2065: 'curcmd': 定義されていない識別子です。 1>c:\users\ken\documents\nand2tetris\projects\07\virtualmachine\vm_inverter\parser.cpp(64): error C2065: 'curcmd': 定義されていない識別子です。 1>c:\users\ken\documents\nand2tetris\projects\07\virtualmachine\vm_inverter\parser.cpp(66): error C2065: 'curcmd': 定義されていない識別子です。 1>コードを生成中... 1>プロジェクト "VM_Inverter.vcxproj" のビルドが終了しました -- 失敗。 ========== ビルド: 0 正常終了、1 失敗、0 更新不要、0 スキップ ==========

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

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

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

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

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

guest

回答1

0

ベストアンサー

いやだから **std::**string arg1(); だってば。

投稿2019/05/07 13:33

episteme

総合スコア16614

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

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

robomoco

2019/05/07 13:36

そうでした! 関数の戻り値のところも付けるんですね。 盲点でした。ありがとうございます。無事動きました。
episteme

2019/05/07 13:40

XXXが名前空間stdにあるかぎり漏れなく std::XXX 。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問