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

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

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

Microsoft Visual C++はWindowsのCとC++の統合開発環境(IDE)であり、コンパイラやデバッガを含んでいます。

Visual Studio

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

Q&A

解決済

2回答

1645閲覧

Visual C++ 2008で使える命令かどうか(stoullなど)

enoeno

総合スコア20

Visual C++

Microsoft Visual C++はWindowsのCとC++の統合開発環境(IDE)であり、コンパイラやデバッガを含んでいます。

Visual Studio

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

0グッド

0クリップ

投稿2020/09/23 16:50

訳あってVisual Studio 2008でC++のプログラムを作らなければなりません。
古いC++なので何が使えて何が使えない命令なのかわからず困っています。

やりたいことは単純なのですが、C++を一から勉強しながらやっている状況で、Webで情報を漁りながら何とか動くものが出来ました。
動くと言ってもpaiza.ioなどで試しながらなのですが、そのコードをいざVisual Studio 2008に打ち込むとコンパイルが通らないのです。
ほとんどが「xxが見つかりませんでした。」「xxのメンバではありません。」などです。古いC++に最近の命令を使ったからなのでしょうか?

コードは以下のようなものです。
(12桁の数字が入っている文字列から数字を取り出して1000000000000から引き算して戻りの文字列に格納する)

#include <string> #define NULL 0 (途中省略) void calc(char *inNumber, char *answer){ //char[]をstringに変換 std::string s_inNumber = inNumber; //stringをlonglongに変換 long long wklong = stoull(s_inNumber, NULL, 10); <====C3861: 'stoull' //計算 wklong = 1000000000000 - wklong; //longlongをstringに変換 std::ostringstream sout; <============ C2079: 'sout' sout << std::setfill('0') << std::setw(12) << wklong; <== C2039,C4552,C3861, s_myNumber = sout.str(); <====C2228 //stringをchar[]に変換 char wkchar[ 12 ] = {}; s_myNumber.copy(wkchar, 12); (途中省略) return; }

よろしくお願いします。

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

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

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

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

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

KoichiSugiyama

2020/09/23 16:58

エラーメッセージは抜粋でも良いので正確にコピー&ペーストして開示したほうが回答が付きやすいと思います。
guest

回答2

0

私もあまり詳しくないですが、Visual C++の準拠表 や Microsoft Visual C++(Wikipedia)を確認すると、VC++2008はC++11に対応していないようです。

std::stoullはC++11からなので使用できないはずです(参照:cppreference.comのstd::stoullリファレンス)。

他にも使用したい命令がエラーになる場合、どのバージョンのC++から対応しているか調べてみてください。

投稿2020/09/23 17:11

KoichiSugiyama

総合スコア3041

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

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

enoeno

2020/09/24 03:18

エラーになった命令ごとにまずはご提示いただいたリンク先で対応バージョンを確認するということですね。これだと2008で使えるかどうか確認できそうです。ありがとうございました。
guest

0

ベストアンサー

ほとんどが「xxが見つかりませんでした。」「xxのメンバではありません。」などです。古いC++に最近の命令を使ったからなのでしょうか?

そうですね。例えばstoullに関してもstd::stoull - cpprefjp - C++日本語リファレンスによると、C++11からのようです。teratailでの以下の質問回答が参考になると思います。

Visual studio 2008 で使用しているc++のバージョンの確認方法 - teratail

動くと言ってもpaiza.ioなどで試しながらなのですが、そのコードをいざVisual Studio 2008に打ち込むとコンパイルが通らないのです。

古いコンパイラを使うと良くあることです。各言語のバージョン、環境情報 - paizaを確認するとpaizaのスキルチェックで使われるC++のバージョンは「C17++ / clang version 10.0.0-4ubuntu1」なので、随分新しいです。paiza.ioでも恐らく同様だと思います。Visual Studio 2008でコンパイルして、エラーの内容を理解しつつ地道に直していくしか方法は無いと思われます。

投稿2020/09/23 17:09

dodox86

総合スコア9256

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

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

enoeno

2020/09/24 03:19

なんと、日本語のリファレンスもあるんですね。これならすぐに対応バージョンを探せそうです。 ありがとうございました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.35%

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

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

質問する

関連した質問