从类中的另一个文件请求函数不起作用

Requesting a function from another file in a class not working

本文关键字:请求 函数 不起作用 文件 另一个      更新时间:2023-10-16

我有 2 个.cpp文件,名为"FactoringProgram.cpp"和"FactoringProgram2nd.cpp",还有 1 个名为"FactoringProgram.h"的头文件。我已经尝试在StackOverflow和其他几个站点上搜索此问题,但尚未找到适合我的解决方案。当我尝试运行以下命令:"g ++ FactoringProgram.cpp FactoringProgram2nd.cpp"时,我收到此错误:

FactoringProgram

.cpp:在函数 'int main((' 中: FactoringProgram.cpp:8:11: error: request for member 'InitialMessage' 在"问题 1"中,它是非类类型"因子分解((">
问题 1.初始消息((;

"FactoringProgram.h"的代码是:

#ifndef FactoringProgram_h
#define FactoringProgram_h
#include <stdio.h>
#include <iostream>
class Factoring
{
private:
int m_FirstCoefficent;
char m_FirstOperator;
int m_SecondCoefficent;
char m_SecondOperator;
int m_3rdExpression;
public:
Factoring();
int InitialMessage();
};
#endif

保理程序.cpp代码:

#include <stdio.h>
#include <iostream>
#include "FactoringProgramH.h"
int main()
{
Factoring Problem1();
Problem1.InitialMessage();
return 0;
}

因子分解程序2nd.cpp代码:

#include "FactoringProgramH.h"
#include <stdio.h>
#include <iostream>
Factoring::Factoring(int FirstCoefficent=0, char FirstOperator='+',
int SecondCoefficent=1, char SecondOperator='+', int 3rdExpression=1)
: m_FirstCoefficent(FirstCoefficen), m_FirstOperator(FirstOperator),
m_SecondCoefficent(SecondCoefficent), m_SecondOperator(SecondOperator),
m_3rdExpression(3rdExpression);
{
}
int Factoring::InitialMessage()
{
std::cout << "Ok right now your expression is looking like: "
<< FirstCoefficent << "x^2 " << FirstOperator << " " << SecondCoefficent
<< " x" << SecondOperator << " " << 3rdExpression;
}

您的代码有几个小错误。这是一个有效的版本(您可以比较并查看我必须更改的内容(。更改摘要如下:

  • 默认参数值应位于头文件 (*.h( 中;
  • 不能以数字开头的变量/参数名称;
  • int InitialMessage()不返回任何内容,所以我将其更改为void InitialMessage();
  • 初始化构造函数中的字段时,最后一个字段不能以分号结尾;
  • 修复了main.cpp中最烦人的解析(每@RSahu条评论(。

保理程序.h

#ifndef FactoringProgram_h
#define FactoringProgram_h
#include <stdio.h>
#include <iostream>
class Factoring
{
private:
int m_FirstCoefficent;
char m_FirstOperator;
int m_SecondCoefficent;
char m_SecondOperator;
int m_3rdExpression;
public:
Factoring(int FirstCoefficent = 0, char FirstOperator = '+',
int SecondCoefficent = 1, char SecondOperator = '+', int thirdExpression = 1);
void InitialMessage();
};
#endif

保理计划.cpp

#include "FactoringProgram.h"
Factoring::Factoring(int firstCoefficent, char firstOperator, int SecondCoefficent, char SecondOperator, int thirdExpression) :
m_FirstCoefficent(firstCoefficent),
m_FirstOperator(firstOperator),
m_SecondCoefficent(SecondCoefficent),
m_SecondOperator(SecondOperator),
m_3rdExpression(thirdExpression)
{}
void Factoring::InitialMessage()
{
std::cout << "Ok right now your expression is looking like: "
<< m_FirstCoefficent << "x^2 " << m_FirstOperator << " " << m_SecondCoefficent
<< " x" << m_SecondOperator << " " << m_3rdExpression;
}

主.cpp

#include <stdio.h>
#include <iostream>
#include "FactoringProgram.h"
int main()
{
Factoring Problem1;
Problem1.InitialMessage();
return 0;
}

对于此错误,请替换:

Factoring Problem1();

由:

Factoring Problem1 = Factoring();

问题是编译器将此行解释为函数声明而不是变量声明。正如评论中提到的,这被称为最烦人的解析器问题。

Obs:您发布的代码包含更多小错误。

你应该定义没有参数的Factoring(),我在FactoringProgram.h中使用了标题

保理程序.h

#include <stdio.h>
#include <iostream>
class Factoring
{
private:
int m_FirstCoefficent;
char m_FirstOperator;
int m_SecondCoefficent;
char m_SecondOperator;
int m_3rdExpression;
public:
Factoring();
Factoring(int,char,int,char,int);
int InitialMessage();
};
#endif

保理程序.cpp

#include "FactoringProgram.h"
int main()
{
Factoring Problem1 = Factoring();
Problem1.InitialMessage();
system("pause");
return 0;
}

保理计划第二.cpp

#include "FactoringProgram.h"
Factoring::Factoring()
{
*this = Factoring(0, '+', 1, '+', 1);
}
Factoring::Factoring(int FirstCoefficent = 0, char FirstOperator = '+',int SecondCoefficent = 1, char SecondOperator = '+', int _3rdExpression = 1) : m_FirstCoefficent(FirstCoefficent), m_FirstOperator(FirstOperator),m_SecondCoefficent(SecondCoefficent), m_SecondOperator(SecondOperator),m_3rdExpression(_3rdExpression)
{
}
int Factoring::InitialMessage()
{
std::cout << "Ok right now your expression is looking like: "
<< m_FirstCoefficent << "x^2 " << m_FirstOperator << " " << m_SecondCoefficent
<< " x" << m_SecondOperator << " " << m_3rdExpression;
return 0;
}