我正在编写一个分为三个不同文件的程序:
my.h
的标题; my.cpp
; use.cpp
; 这里是他们的陈述:
/* Header file my.h
Define global variable foo and functions print and print_foo
to print results out */
extern int foo;
void print_foo();
void print(int);
/* Source file my.cpp where are defined the two funcionts print_foo() and print()
and in where it is called the library std_lib_facilities.h */
#include "stdafx.h"
#include "std_lib_facilities.h"
#include "my.h"
void print_foo() {
cout << "The value of foo is: " << foo << endl;
return;
}
void print(int i) {
cout << "The value of i is: " << i << endl;
return;
}
/ use.cpp : definisce il punto di ingresso dell'applicazione console.
//
#include "stdafx.h"
#include "my.h"
#include <iostream>
using namespace std;
int _tmain(int argc, _TCHAR* argv[])
{
int foo = 7;
int& i = foo;
i = 99;
char cc = '0';
while (cin >> cc) {
switch (cc) {
case '1':
void print_foo();
break;
case '2':
void print();
break;
default:
exit(EXIT_FAILURE);
}
}
return 0;
}
我的主要问题是程序编译并正确运行,但它没有像我想象的那样打印任何内容。
我该如何解决?
谢谢!
利奥
答案 0 :(得分:2)
不需要调用指定返回类型的函数。正确
void print_foo(); // This actually declares a function prototype
到
print_foo();
和
print(i); // Pass i as argument
答案 1 :(得分:1)
将void
中的void print_foo();
和void print();
switch
中的extern int foo;
放下。
目前您只是宣布一个函数原型;实际上并没有调用函数。
您的[assembly: OwinStartup(typeof(Chatter.Host.Startup))]
namespace Chatter.Host
{
public class Startup
{
public void Configuration(IAppBuilder app)
{
// Any connection or hub wire up and configuration should go here
app.MapSignalR();
}
}
方法虽然在语法上有效,但可能会使您的代码库难以扩展和维护:请考虑明确传递参数。
答案 2 :(得分:1)
您的代码声称*“定义全局变量foo ...”如下...
extern int foo;
...但是这只是声明某些翻译单元实际上会定义它(没有前导extern
限定符)。您发布的代码中没有实际变量,这意味着您的程序不应该链接,除非您使用的某些库巧合地带有foo
符号。
这个较短的代码会缩小您的问题:
#include <iostream>
extern int foo;
void f()
{
std::cout << foo << '\n';
}
int main() {
int foo = 7;
f();
}
您可以看到编译器错误消息here,即:
/tmp/ccZeGqgN.o: In function `f()':
main.cpp:(.text+0x6): undefined reference to `foo'
collect2: error: ld returned 1 exit status
答案 3 :(得分:0)
你会输入主要功能
case '1':
print_foo();
break;
注意我删除了“#34; void&#34;在这种情况下1.因为你没有重新声明那里的功能。你只需使用它。