首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >从不工作的类中的另一个文件请求函数

从不工作的类中的另一个文件请求函数
EN

Stack Overflow用户
提问于 2018-08-12 18:11:18
回答 3查看 80关注 0票数 2

我有两个.cpp文件,名为"FactoringProgram.cpp“和"FactoringProgram2nd.cpp",还有一个名为"FactoringProgram.h”的头文件。我已经尝试过在StackOverflow和其他几个站点上搜索这个问题,但是没有找到对我有用的解决方案。当我试图运行以下命令:"g++ FactoringProgram.cpp FactoringProgram2nd.cpp“时,会得到以下错误:

FactoringProgram.cpp:在函数‘int()’:FactoringProgram.cpp:8:11: error:对‘Problem1 1’中的成员‘InitialMessage’的请求,它是非类类型的‘Factoring()’ 问题1.();

"FactoringProgram.h“的代码是:

代码语言:javascript
复制
#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

FactoringProgram.cpp代码:

代码语言:javascript
复制
#include <stdio.h>
#include <iostream>
#include "FactoringProgramH.h"

int main()
{
    Factoring Problem1();
    Problem1.InitialMessage();
    return 0;
}

FactoringProgram2nd.cpp代码:

代码语言:javascript
复制
#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;
}
EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2018-08-12 18:45:43

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

  • 默认参数值应该在头文件(*.h)中;
  • 不能用数字开始变量/参数名称;
  • int InitialMessage()不返回任何东西,所以我将它更改为void InitialMessage()
  • 在构造函数中初始化字段时,最后一个字段不能以分号结尾;
  • 修正了最令人烦恼的解析 (per @RSahu注释)在main.cpp中的问题。

FactoringProgram.h

代码语言:javascript
复制
#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

FactoringProgram.cpp

代码语言:javascript
复制
#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;
}

main.cpp

代码语言:javascript
复制
#include <stdio.h>
#include <iostream>
#include "FactoringProgram.h"

int main()
{
    Factoring Problem1;
    Problem1.InitialMessage();
    return 0;
}
票数 1
EN

Stack Overflow用户

发布于 2018-08-12 18:46:35

将此错误替换为:

代码语言:javascript
复制
Factoring Problem1();

出自:

代码语言:javascript
复制
Factoring Problem1 = Factoring();

问题在于编译器将这一行解释为函数声明,而不是变量声明。正如注释中提到的,这被称为最令人烦恼的解析器问题。

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

票数 -1
EN

Stack Overflow用户

发布于 2018-08-12 18:48:02

您应该在没有params的情况下定义Factoring(),我在FactoringProgram.h中使用了头。

FactoringProgram.h

代码语言:javascript
复制
#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

FactoringProgram.cpp

代码语言:javascript
复制
#include "FactoringProgram.h"

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

FactoringProgram2nd.cpp

代码语言:javascript
复制
#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;
}
票数 -1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/51811560

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档