C++函数中未解析的外部链接
Unresolved external link in C++ function
我一直收到以下错误,似乎无法解决:
错误LNK2019:未解析的外部符号";double__cdecl-orderIn(双,双,双)"(?订单输入@@YANNNN@Z)在函数_main 中引用
致命错误LNK1120:1个未解析的外部
我知道我试图通过函数传递变量的方式有问题,但我就是得不到。我希望在第一个函数中收集和计算的信息能够通过并被第二个函数使用。我试过许多方法都无济于事。
我在这里错过了什么?
谢谢!
#include <iostream>
#include <iomanip>
using namespace std;
double orderIn(double, double, double);
void shippingOut(double, double, double);
double spoolsOrdered,
spoolsInStock,
shipping,
total,
backordered,
charges,
spoolsShipping;
int main()
{
orderIn(spoolsOrdered, spoolsInStock, shipping);
shippingOut(spoolsShipping, backordered, total);
return 0;
}//end int main
double orderIn(double &spoolsOrdered, double &spoolsInStock, double &shipping)
{
char extracharge;
//spools ordered
cout << "How many spools would you like to order? ";
cin >> spoolsOrdered;
while (spoolsOrdered < 1)
{
cout << "That is not a valid entry ";
cin >> spoolsOrdered;
}
//spools in stock
cout << "How many spools are currently in stock? ";
cin >> spoolsInStock;
//extra charges
cout << "Are there any special charges on this order? ";
cin >> extracharge;
//special charges
if ( extracharge == 'Y' || extracharge == 'y')
{
cout << "What is the additional charge per spool? ";
cin >> charges;
shipping = (10 + charges);
}
else
shipping = 10;
return (&spoolsOrdered, &spoolsInStock, shipping);
}
void shippingOut(double spoolsOrdered, double spoolnStock, double shipping)
{
double backordered;
double subTotal;
double totalShipping;
double total;
double spoolsShipping;
if (spoolsOrdered > spoolsInStock)
{
backordered=(spoolsOrdered - spoolsInStock);
cout << "There are " << spoolsInStock << " spools ready to be shipped./n";
cout << "The remaining " << backordered <<" are on backorder.";
spoolsShipping=spoolsInStock;
}
else
{
cout << "All " <<spoolsOrdered << " spools ordered are ready to ship.n";
spoolsShipping=spoolsOrdered;
}
//Product Charges
subTotal = spoolsShipping * 100;
cout << "Subtotal: $" << subTotal << endl;
//Shipping Charges
totalShipping = spoolsOrdered * shipping;
cout << "S/H Total: $" << totalShipping << endl;
//Total
total = subTotal + totalShipping;
cout << "The total of the order ready to ship is: $" << total << endl;
}
您声明:
double orderIn(double, double, double);
然后使用它。您稍后定义:
double orderIn(double &spoolsOrdered, double &spoolsInStock, double &shipping)
这是一个不同的功能;参数类型是对double
的引用,而不是简单的double
。
修复声明或定义——看起来你真的需要修复声明,因为你想在调用函数中设置变量:
double orderIn(double &, double &, double &);
您还应该查看为什么有这么多全局变量,以及为什么全局变量名称被参数遮蔽。尽可能避免使用全局变量。
a) 当我过去尝试运行它时,我只能通过在main之前定义变量来让它工作。所有这些变量应该在哪里声明?
通常,您将在函数中声明变量(在本例中为main()
),然后将变量传递给需要使用它们的函数。有时,全局变量是合适的。所以,我期待:
int main()
{
double spoolsOrdered = 0.0;
double spoolsInStock = 0.0;
double shipping = 0.0;
double total = 0.0;
double backordered = 0.0;
double spoolsShipping = 0.0;
orderIn(spoolsOrdered, spoolsInStock, shipping);
shippingOut(spoolsShipping, backordered, total);
// Use these values?
return 0;
}
如果您不使用main()
中的值,那么为什么要首先传递它们呢。
然后我注意到orderIn()
和shippingOut()
都返回一个double
,但您没有使用该值。orderIn()
返回什么?有一个惊喜:
return (&spoolsOrdered, &spoolsInStock, shipping);
这并不像你想象的那样。逗号是逗号运算符。对spoolsOrdered
的地址进行评估并丢弃;对CCD_ 10的地址进行评估并丢弃;则返回CCD_ 11中的值。您可以更改函数以返回void
,并完全删除return
语句,类似于shippingOut()
。
全局变量charges
应该是orderIn()
中的局部变量。
b) 变量和参数之间的关系是什么?
在函数orderIn(double &spoolsOrdered, double &spoolsInStock, double &shipping)
中,每个参数都隐藏一个同名的全局变量。由于这是C++,您仍然可以使用范围运算符::
来访问全局变量,如下所示:
::spoolsOrdered // The global variable
spoolsOrdered // The local reference variable -- a reference to the global
在这种情况下,结果基本相同,这在很大程度上是巧合,但如果您有值参数或指针参数,或者如果调用没有将全局变量作为引用参数传递,效果会大不相同。
如果使用GCC(g++
),则-Wshadow
选项会报告阴影问题。
您的函数原型是:
double orderIn(double, double, double);
然而,您的实际功能定义是:
double orderIn(double &spoolsOrdered, double &spoolsInStock, double &shipping)
{
}
double
和double&
是不同的类型,因此您需要调整原型或定义。
- 未解决的外部链接问题
- 在Embarcadero C++ Builder中生成的DLL未解决的外部链接错误
- 内联函数/变量的外部链接
- 模板外部链接不起作用
- 字符串文本不能有外部链接的原因是什么?
- 当用作模板参数时,功能指针是否需要指向具有外部链接的函数
- 链接在XLNT.TEST项目上失败,具有10个未经介绍的外部链接:
- C :将外部链接与未命名的名称空间使用常数变量
- C++外部链接
- 会员变量是否具有外部链接
- 为什么对非类型模板参数的引用需要外部链接
- VC glew外部链接错误
- Clang AST : 外部链接规范问题
- 何时使用外部链接初始化全局常量,避免静态初始化顺序惨败
- 类中的匿名结构,具有外部链接
- 带外部链接的便携式名称"typeof"
- 类型是否只有内部/外部链接以外的"链接"?
- 未命名命名空间中名称的外部链接
- 从QWebKit上托管的flash播放器打开外部链接
- C++函数中未解析的外部链接