【问题标题】:Using struct type with function使用带有函数的结构类型
【发布时间】:2017-09-21 20:16:55
【问题描述】:

Main.cpp

#include "Header.h"
SolveSE(1, 2, 3);

头文件.h

struct Solution;
Solution SolveSE(double ax, double bx, double c);

SSE.cpp

#include "Header.h"
struct Solution
{
    size_t count;
    double *roots;
};

Solution SolveSE(double ax, double bx, double c) 
{   
    if (fabs(ax)<1e-5)
    {
        throw std::invalid_argument("a should not be a zero");
    }
    double Discriminant = bx - 4 * ax * c;

    if (Discriminant > 0)
    {
        double x1 = -bx + sqrt(Discriminant) / 2 * ax;
        double x2 = -bx - sqrt(Discriminant) / 2 * ax;
        double roots[] = { x1, x2 };
        return { 2, roots };
    }
    if (Discriminant == 0)
    {
        double x1 = -bx + sqrt(Discriminant) / 2 * ax;
        double roots[] = { x1};
        return { 1, roots };
    }
    if (Discriminant < 0)
    {
        return { 0};
    }
    return {};
}

来自 Visual Studio 的错误:

严重性代码描述项目文件行抑制状态 错误 C2027 使用未定义类型 'Solution' SolveSquareEquation c:\users\dima\documents\visual studio 2017\projects\solvesquareequation\solvesquareequation\main.cpp 8

浮动提示说,返回类型“解决方案”不完整。

我的函数实现有问题吗?

test.cpp

TEST_METHOD(TestSSE)
{
    Assert::AreEqual<Solution>(SolveSE(1,3,-4), {2, {4, 1}})
}

【问题讨论】:

  • struct Solution 定义仅在SSE.cpp 中可见,您应该将其移至标题。
  • 如果您想要真正的答案,请显示真实代码,而不是明显的假代码。
  • 我有 struct 解决方案;在 Header.h 中
  • 这是我的真实代码。我开始学习 C++。
  • 那里只有结构的前向声明。但是你需要定义struct Solution { size_t count; double *roots;};。否则Solution 类型将不完整,并在SSE.cpp 以外的翻译单元中调用函数时导致错误。 PS您还缺少一些包括,例如size_tcstdintsqrtcmath

标签: c++


【解决方案1】:

你应该将结构移动到头文件:

struct Solution
{
    size_t count;
    double *roots;
};

【讨论】:

  • 谢谢,但是我怎样才能用我的类型“解决方案”来工作 Assert::AreEqual 函数,或者在这种情况下我能做什么?严重性代码描述项目文件行抑制状态错误(活动) E0304 没有重载函数实例“Microsoft::VisualStudio::CppUnitTestFramework::Assert::AreEqual”与参数列表相匹配 SolveQuadraticEquationUnitTest c:\Users\Dima\Documents\Visual Studio 2017 \Projects\SolveSquareEquation\SolveQuadraticEquationUnitTest\unittest1.cpp 35
  • 严重代码描述项目文件行抑制状态错误 C2664 'void Microsoft::VisualStudio::CppUnitTestFramework::Assert::AreEqual(const T &,const T &,const wchar_t *,const Microsoft::VisualStudio::CppUnitTestFramework::__LineInfo *)':无法将参数 2 从 'initializer list' 转换为 'const Solution &' SolveQuadraticEquationUnitTest c:\users\dima\documents\visual studio 2017\projects\solvesquareequation\solvequadraticequationunittest\unittest1 .cpp 35
  • 有什么解释吗?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2022-06-10
  • 2014-03-11
  • 2013-02-11
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多