はここで簡単なconstexprのリンクリストの作成での私の試みだ - このプログラムをコンパイルするにconstexprのリンクリスト - Xへのconst Xの*から無効な変換*
struct Node
{
constexpr Node(const int n, Node const* next = nullptr)
: value(n), next(next) {}
constexpr Node push(const int n) const { return Node(n, this); }
int value;
Node const* next;
};
constexpr auto getSum(Node n) {
int sum = 0;
Node *current = &n;
while(current != nullptr) {
sum += current->value;
current = current->next;
}
return sum;
}
int main() {
constexpr Node a(0);
a.push(1);
a.push(22);
constexpr auto result = getSum(a);
return result;
}
を、次のエラーが
prog.cc: In function 'constexpr auto getSum(Node)':
prog.cc:16:28: error: invalid conversion from 'const Node*' to 'Node*' [-fpermissive]
current = current->next;
~~~~~~~~~^~~~
prog.cc: In function 'int main()':
prog.cc:25:35: in constexpr expansion of 'getSum(a)'
prog.cc:16:28: error: conversion of 'const Node*' null pointer to 'Node*' is not a constant expression
を示しています
この問題を解決し、そのようなリンクリストを生成するにはどうすればよいですか?実行をオンラインで確認するためのWandbox Linkがあります。
うわー、私は何をやっているその可能性を考えていない... –
'constexpr'オブジェクトまだ抽象機械の規則に従ってください。 'push'へのすべての呼び出しは即時に終了する一時的なものを返します。エラーを修正した場合でも、リストは決して拡大しません。 – StoryTeller
ダン..私が今まで見た中で最もconstとconstexprでなければなりません。 – Brandon