【发布时间】: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_t的cstdint和sqrt的cmath。
标签: c++