This question already has an answer here:
Most vexing parse
(1个答案)
3年前关闭。
我在互联网上搜索了此编译错误的解决方案。它们中的大多数似乎与两个选项有关:
将指针视为对象并且不取消引用它。 错误地将变量与函数一起返回变量类型并尝试访问它。
我的代码是:
和main.cc:
如果您尝试使用
您只会得到错误...
现在,我不知道是否缺少某些内容,但是看不到代码中前面提到的两个问题。很抱歉,如果我盲目失明或其他任何原因,但是我看不到错误。
任何帮助,将不胜感激。
不幸的是,您从
假设您要为
为了避免歧义。通过这些更改,您的代码将被编译。
wandbox example
(1个答案)
3年前关闭。
我在互联网上搜索了此编译错误的解决方案。它们中的大多数似乎与两个选项有关:
我的代码是:
#ifndef ESCRITOR_PROLOG_HH
#define ESCRITOR_PROLOG_HH
#include "planning.hh"
#include <string>
#include <ostream>
class EscritorProlog {
private:
Planning planningAEscriure;
public:
EscritorProlog(Planning planning);
EscritorProlog(Planning &&planning);
void escriuFitxerProlog(std::ostream &escritor);
};
#endif
和main.cc:
#ifndef MAIN_CC
#define MAIN_CC
#include "escritorProlog.hh"
#include <iostream>
#include <fstream>
int main () {
std::ofstream escritor("./test.txt");
EscritorProlog test(Planning());
test.escriuFitxerProlog(escritor);
}
#endif
如果您尝试使用
g++ -c main.cc -std=c++11
您只会得到错误...
main.cc: In function ‘int main()’:
main.cc:11:8: error: request for member ‘escriuFitxerProlog’ in ‘test’, which is of non-class type ‘EscritorProlog(Planning (*)())’
test.escriuFitxerProlog(escritor);
现在,我不知道是否缺少某些内容,但是看不到代码中前面提到的两个问题。很抱歉,如果我盲目失明或其他任何原因,但是我看不到错误。
任何帮助,将不胜感激。
最佳答案
这是the most vexing parse的实例。
您可以使用列表初始化来解决它,在这种情况下,它是明确的:
EscritorProlog test(Planning{});
不幸的是,您从
EscritorProlog
构造了不明确的Planning
:EscritorProlog(Planning planning); // (1)
EscritorProlog(Planning &&planning); // (2)
假设您要为
(1)
定义一个复制构造函数,请将签名更改为EscritorProlog(const Planning& planning);
为了避免歧义。通过这些更改,您的代码将被编译。
wandbox example
10-06 13:19