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

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

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

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

Q&A

解決済

2回答

3465閲覧

C++の文字列リテラルのコンパイルエラー

kazuki__

総合スコア28

C++

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

1グッド

0クリップ

投稿2020/03/10 02:30

こちらのサイト(江添亮のC++入門)を参考にC++を勉強中なのですが、「文字列」の章で以下のプログラムをコンパイルしようとするとエラーが出ます。

int main() { std::cout << "hello"s + "world"s ; }

エラー内容

main.cpp:2:26: error: no matching literal operator for call to 'operator""s' with arguments of types 'const char *' and 'unsigned long', and no matching literal operator template std::cout << "hello"s + "world"s; ^ main.cpp:2:41: error: no matching literal operator for call to 'operator""s' with arguments of types 'const char *' and 'unsigned long', and no matching literal operator template std::cout << "hello"s + "world"s; ^

"hello"の後ろにあるsが文字列型への変換を表しているのだけど、変換できないということを言っているのでしょうか。
上記のWebサイトでは普通に動くような記載になっているので、こちらは環境起因のエラーということでしょうか。

上記のエラーに関して知見をお持ちの方がいらっしゃいましたら、エラーの原因と解決方法をご教授いただけますと幸いです。よろしくお願いいたします。

SeieiMiyagi👍を押しています

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

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

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

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

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

cateye

2020/03/10 02:59 編集

間違った記述をしてしまいました、削除します。
guest

回答2

0

当該書籍のサンプルコードはヘッダーファイルの省略にあるall.hが必要です。

投稿2020/03/10 02:38

asm

総合スコア15147

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

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

kazuki__

2020/03/10 03:13

回答ありがとうございます! all.hの部分を #include <bits/stdc++.h> で代替したつもりだったのですが、 using namespace std::literals; が抜けていたみたいです。 コンパイル通りました!
guest

0

ベストアンサー

江添さんのC++入門は冒頭の方で標準ライブラリのヘッダーファイルのほとんどすべてを#includeしたヘッダーファイル、all.hを作成していて、g++でコンパイルするときにall.hをincludeするオプションを指定することを前提にして書かれています
https://ezoeryou.github.io/cpp-intro/#%E3%83%98%E3%83%83%E3%83%80%E3%83%BC%E3%83%95%E3%82%A1%E3%82%A4%E3%83%AB%E3%81%AE%E7%9C%81%E7%95%A5

今回の場合all.hで記載されているincludeやusingを足してやるとうまく動きます。

#include <iostream> #include <string> using namespace std::literals; int main() { std::cout << "hello"s + "world"s ; }

江添さんの本では他のコードもall.hがある環境を前提として書かれているので入門用の環境構築の部分を行ってから読み進めるといいと思います。
https://ezoeryou.github.io/cpp-intro/#%E5%85%A5%E9%96%80%E7%94%A8%E3%81%AE%E7%92%B0%E5%A2%83%E6%A7%8B%E7%AF%89

投稿2020/03/10 02:47

SeieiMiyagi

総合スコア247

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

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

kazuki__

2020/03/10 03:12

回答ありがとうございます! all.hの部分を`#include <bits/stdc++.h>`で代替したつもりだったのですが、`using namespace std::literals;`が抜けていたみたいです。 コンパイル通りました!
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問